Redis:通信协议、内存回收与淘汰策略(3)
Redis

3.3. 周期删除
周期删除:通过一个定时任务,周期性的抽样部分过期的key,然后执行删除。
3.3.1. 执行周期有两种**:
- SLOW模式: Redis服务初始化函数initServer()中设置定时任务,按照server.hz的频率来执行过期key清理
- FAST模式:Redis的每个事件循环前会调用beforeSleep()函数,执行过期key清理
SLOW模式规则:
- 执行频率受server.hz影响,默认为10,即每秒执行10次,每个执行周期100ms。
- 执行清理耗时不超过一次执行周期的25%.默认slow模式耗时不超过25ms
- 逐个遍历db,逐个遍历db中的bucket,抽取20个key判断是否过期
- 如果没达到时间上限(25ms)并且过期key比例大于10%,再进行一次抽样,否则结束
FAST模式规则 *(过期key比例小于10%不执行 ):
- 执行频率受beforeSleep()调用频率影响,但两次FAST模式间隔不低于2ms
- 执行清理耗时不超过1ms
- 逐个遍历db,逐个遍历db中的bucket,抽取20个key判断是否过期 如果没达到时间上限(1ms)并且过期key比例大于10%,再进行一次抽样,否则结束
小总结:
RedisKey的TTL记录方式:
在RedisDB中通过一个Dict记录每个Key的TTL时间
过期key的删除策略:
惰性清理:每次查找key时判断是否过期,如果过期则删除
定期清理:定期抽样部分key,判断是否过期,如果过期则删除。 定期清理的两种模式:
SLOW模式执行频率默认为10,每次不超过25ms
FAST模式执行频率不固定,但两次间隔不低于2ms,每次耗时不超过1ms
4 Redis内存回收-内存淘汰策略
内存淘汰:就是当Redis内存使用达到设置的上限时,主动挑选部分key删除以释放更多内存的流程。Redis会在处理客户端命令的方法processCommand()中尝试做内存淘汰:

淘汰策略:Redis支持8种不同策略来选择要删除的key:
- noeviction: 不淘汰任何key,但是内存满时不允许写入新数据,默认就是这种策略。
- volatile-ttl: 对设置了TTL的key,比较key的剩余TTL值,TTL越小越先被淘汰
- allkeys-random:对全体key ,随机进行淘汰。也就是直接从db->dict中随机挑选
- volatile-random:对设置了TTL的key ,随机进行淘汰。也就是从db->expires中随机挑选。
- allkeys-lru: 对全体key,基于LRU算法进行淘汰
- volatile-lru: 对设置了TTL的key,基于LRU算法进行淘汰
- allkeys-lfu: 对全体key,基于LFU算法进行淘汰
- volatile-lfu: 对设置了TTL的key,基于LFI算法进行淘汰 比较容易混淆的有两个:
- LRU(Least Recently Used),最少最近使用。用当前时间减去最后一次访问时间,这个值越大则淘汰优先级越高。
- LFU(Least Frequently Used),最少频率使用。会统计每个key的访问频率,值越小淘汰优先级越高。
Redis的数据都会被封装为RedisObject结构:

LFU的访问次数之所以叫做逻辑访问次数,是因为并不是每次key被访问都计数,而是通过运算:
- 生成0~1之间的随机数R
- 计算 (旧次数 * lfu_log_factor + 1),记录为P
- 如果 R < P ,则计数器 + 1,且最大不超过255
- 访问次数会随时间衰减,距离上一次访问时间每隔 lfu_decay_time 分钟,计数器 -1
最后用一副图来描述当前的这个流程吧

以上是IT袋网网关于Redis 和 通信协议、内存回收与淘汰策略的具体介绍,希望大家能喜欢!
相关阅读
-
磁盘分区助手扩展c盘 win11分区助手扩大c盘方法
本文核心内容:win11分区助手扩大c盘方法方面的介绍,关于磁盘分区助手扩展c盘 win11分区助手扩大c盘方法,接下来IT袋带大家一起了解。 有一些小伙伴由于自己的C盘太小,所以想要使用分区
-
内存最大的手机排行 2023支持存储卡的手机推荐
IT袋网为大家说一说内存最大的手机排行和2023支持存储卡的手机推荐的相关话题,下面为详细的介绍。 谁也没想到,今年下半年安卓手机会迎来24G的超大内存。要知道,今年上半年主流的16G内
-
机械硬盘怎么格式化最干净 新机械硬盘分区教程
今天为大家介绍机械硬盘怎么格式化最干净和新机械硬盘分区教程方面的知识,相关内容具体如下: 电脑硬盘存储数据过多,占用太多内存,格式化是清空硬盘空间最简单的方法。用户重装系
-
主板天梯图2022年 主板天梯图2022年1月
如果想了解主板天梯图2022年的方法内容,关于主板天梯图2022年 主板天梯图2022年10月,接下来IT袋小编为大家介绍。 在我们使用电脑的时候,主板可是一个非常重要的组件,一般来说主板就像


