定期删除
- Redis启动服务器初始化时,读取配置server.hz的值,默认为10
- 每秒钟执行server.hz次
serverCron()--->databasesCron()--->activeExpireCycle()
-
activeExpireCycle()
对每个expires[*]逐一进行检测,每次执行250ms/server.hz - 对某个expires[*]检测时,随机挑选W个key检测
- 如果key超时,删除key
- 如果一轮中删除的key的数量>W
*
25%,循环该过程 - 如果一轮中删除的key的数量<=W*25%,检查下一个expires[
*
],0-15循环 - W取值=ACTIVE_EXPIRE_CYCLE_LOOKUPS_PER_LOOP属性值
- 参数current_db用于记录
activeExpireCycle()
进入哪个expires[*
]执行 - 如果
activeExpireCycle()
执行时间到期,下次从current_db继续向下执行
定期删除
- 周期性轮询redis库中的时效性数据,采用随机抽取的策略,利用过期数据占比的方式控制删除频度
- 特点1:CPU性能占用设置有峰值,检测频度可自定义设置
- 特点2:内存压力不是很大,长期占用内存的冷数据会被持续清理
- 总结:周期性检查存储空间(随机抽查,重点抽查)
删除策略对比
删除策略 | 对比结果 |
---|---|
定时删除 | 1.节约内存,无占用 2.不分时段占用CPU资源,频度高 3.拿时间换空间 |
惰性删除 | 1.内存占用严重 2.延时执行,CPU利用率高 3.拿空间换时间 |
定期删除 | 1.内存定期随机清理 2.每秒花费固定的CPU资源维护内存 3.随机抽查,重点抽查 |