码迷,mamicode.com
首页 > 其他好文 > 详细

Redis核心技术与实战

时间:2021-05-03 12:49:03      阅读:0      评论:0      收藏:0      [点我收藏+]

标签:height   同事   整数   ima   lis   rem   http   如何   文件   

 

 

开篇词 | 这样学Redis,才能技高一筹

 技术图片

 

技术图片

 

 

 

 

 

01 | 基本架构:一个键值a数据库包含什么?

可以存哪些数据?

基本的数据模型是 key-value 模型

02 | 数据结构:快速的Redis有哪些慢操作?

技术图片

 

 

 

 键和值用什么结构组织?

为什么哈希表操作变慢了?

有哪些底层数据结构?

  集合类型的底层数据结构主要有 5 种:整数数组、双向链表、哈希表、压缩列表和跳表。

 

  其中,哈希表的操作特点我们刚刚已经学过了;整数数组和双向链表也很常见,它们的操作特征都是顺序读写,也就是通过数组下标或者链表的指针逐个元素访问,操作复杂度基本是 O(N),操作效率比较低;压缩列表和跳表我们平时接触得可能不多,但它们也是 Redis 重要的数据结构,所以我来重点解释一下。

 不同操作的复杂度

技术图片

 

 

 

  在压缩列表中,如果我们要查找定位第一个元素和最后一个元素,可以通过表头三个字段的长度直接定位,复杂度是 O(1)。而查找其他元素时,就没有这么高效了,只能逐个查找,此时的复杂度就是 O(N) 了。

 

我们再来看下跳表。

有序链表只能逐一查找元素,导致操作起来非常缓慢,于是就出现了跳表。具体来说,跳表在链表的基础上,增加了多级索引,通过索引位置的几个跳转,实现数据的快速定位.

技术图片

 

 

 

单元素操作,是指每一种集合类型对单个数据实现的增删改查操作。例如,Hash 类型的 HGET、HSET 和 HDEL,Set 类型的 SADD、SREM、SRANDMEMBER 等。这些操作的复杂度由集合采用的数据结构决定,例如,HGET、HSET 和 HDEL 是对哈希表做操作,所以它们的复杂度都是 O(1);Set 类型用哈希表作为底层数据结构时,它的 SADD、SREM、SRANDMEMBER 复杂度也是 O(1)。

范围操作,是指集合类型中的遍历操作,可以返回集合中的所有数据,比如 Hash 类型的 HGETALL 和 Set 类型的 SMEMBERS,或者返回一个范围内的部分数据,比如 List 类型的 LRANGE 和 ZSet 类型的 ZRANGE。这类操作的复杂度一般是 O(N),比较耗时,我们应该尽量避免

03 | 高性能IO模型:为什么单线程Redis能那么快?

 Redis 为什么用单线程?

多线程的开销

单线程 Redis 为什么那么快?

基本 IO 模型与阻塞点

对不同事件的发生,调用相应的处理函数

 

04 | AOF日志:宕机了,Redis如何避免数据丢失?

 AOF 日志是如何实现的?

always everysec no(操作系统后决定)

AOF重写机制,重写机制具有“多变一”功能。所谓的“多变一”,也就是说,旧日志文件中的多条命令,在重写后的新日志中变成了一条命令

05 | 内存快照:宕机后,Redis如何实现快速恢复?

Redis 提供了两个命令来生成 RDB 文件,分别是 save 和 bgsave

bgsave 使用操作系统的copyOnWrite技术。

全量快照和增量快照

混合使用AOF和快照

  内存快照以一定的频率执行,在两次快照之间,使用 AOF 日志记录这期间的所有命令操作

 

06 | 数据同步:主从库如何实现数据一致?

08 | 哨兵集群:哨兵挂了,主从库还能切换吗?

 

07 | 哨兵机制:主库挂了,如何不间断服务?

 

08 | 哨兵集群:哨兵挂了,主从库还能切换吗?

 

09 | 切片集群:数据增多了,是该加内存还是加实例?

 

 

给哪些内存数据做快照?

Redis核心技术与实战

标签:height   同事   整数   ima   lis   rem   http   如何   文件   

原文地址:https://www.cnblogs.com/likeloves/p/14661409.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!