黑马Redis原理篇
- 1、数据结构
- 1.1、动态字符串SDS
- 1.2、IntSet
- 1.3、Dict
- 1.4、ZipList
- 1.5、QuickList
- 1.6、SkipList
- 1.7、RedisObject
- 1.8、五种数据结构
- 1. String(小EMBSTR,大RAW (SDS),少量整数INT)
- 2. List(Redis3.2之后使用QuickList实现)
- 3. Set(少量整数IntSet,正常采用Dict,元素存在key中,value为null)
- 4. ZSet(少量数据使用ZipList,使用Dict和SkipList)
- 5. Hash(少量数据ZipList,大量数据Dict)
- 2、网络模型
- 2.1、用户空间和内核空间
- 2.2、阻塞IO
- 2.3、非阻塞IO
- 2.4、IO多路复用
- 2.4.1 Linux中的I/O多路复用
- 2.4.1 epoll中的事件通知机制
- 2.5、信号驱动IO
- 2.6、异步IO
- IO操作同步异步总结(重要)
- 2.7、Redis网络模型(I/O多路复用+事件派发)
- 3、通信协议
- 3.1、RESP协议
- 4、内存策略
- 4.1、过期策略
- 4.2、淘汰策略
1、数据结构
1.1、动态字符串SDS
Redis是基于C语言实现的。
1.2、IntSet
1.3、Dict
渐近式rehash:
1.4、ZipList
1.5、QuickList
1.6、SkipList
1.7、RedisObject
1.8、五种数据结构
1. String(小EMBSTR,大RAW (SDS),少量整数INT)
2. List(Redis3.2之后使用QuickList实现)
3. Set(少量整数IntSet,正常采用Dict,元素存在key中,value为null)
4. ZSet(少量数据使用ZipList,使用Dict和SkipList)
5. Hash(少量数据ZipList,大量数据Dict)
2、网络模型
2.1、用户空间和内核空间
2.2、阻塞IO
2.3、非阻塞IO
2.4、IO多路复用
2.4.1 Linux中的I/O多路复用
2.4.1 epoll中的事件通知机制
2.5、信号驱动IO
2.6、异步IO
IO操作同步异步总结(重要)
2.7、Redis网络模型(I/O多路复用+事件派发)
3、通信协议
3.1、RESP协议
4、内存策略
4.1、过期策略
Redis 通过一个叫做过期字典(可以看作是 hash 表)来保存数据过期的时间。
惰性删除:不是在TTL到期后就立刻删除,而是在访问一个key的时候,检查该key的存活时间,如果已经过期才执行删除。这样对 CPU 最友好,但是可能会造成太多过期 key 没有被删除。
定期删除:每隔一段时间抽取一批 key 执行删除过期 key 操作。并且,Redis 底层会通过限制删除操作执行的时长和频率来减少删除操作对 CPU 时间的影响。
定期删除的两种模式:
- SLOW模式执行频率默认为10,每次不超过25ms
- FAST模式执行频率不固定,但两次间隔不低于2ms,每次耗时不超过1ms
4.2、淘汰策略
内存淘汰:就是当Redis内存使用达到设置的上限时,主动挑选部分key删除以释放更多内存的流程。Redis会在处理客户端命令的方法processCommand()中尝试做内存淘汰