您现在的位置是:首页 >技术杂谈 >黑马Redis原理篇网站首页技术杂谈
黑马Redis原理篇
简介黑马Redis原理篇
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()中尝试做内存淘汰
风语者!平时喜欢研究各种技术,目前在从事后端开发工作,热爱生活、热爱工作。