您现在的位置是:首页 >技术杂谈 >黑马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()中尝试做内存淘汰

风语者!平时喜欢研究各种技术,目前在从事后端开发工作,热爱生活、热爱工作。





U8W/U8W-Mini使用与常见问题解决
QT多线程的5种用法,通过使用线程解决UI主界面的耗时操作代码,防止界面卡死。...
stm32使用HAL库配置串口中断收发数据(保姆级教程)
分享几个国内免费的ChatGPT镜像网址(亲测有效)
Allegro16.6差分等长设置及走线总结