更新时间:2022-04-22 GMT+08:00
分享

DCS删除过期key

问题现象

分布式缓存服务每天定时清理一次过期key是根据什么规则清理的?清理规则可以自己调整么?

过期key删除机制

  • 惰性删除:Redis的删除策略由主循环中的判断逻辑进行控制,所有Key读写命令执行之前都会调用函数对其进行检查,如果过期,则删除该键,然后返回Key不存在的结果;未过期则不做操作,继续执行原有的命令。
  • 定期删除:由Redis的定时任务函数实现,该函数以一定的频率运行,每次运行时,都从键空间中取出一定数量的随机Key进行检查,并删除其中的过期键。

    不是每次定时任务都会检查所有的Key,而是随机检查一定数量的Key,该机制旨在防止阻塞Redis主进程太久而造成业务阻塞,所以会造成已过期的Key释放内存速度较慢。

解决方案

  • 配置一个定时的热key扫描,具体操作可参考热key扫描或写一个用scan命令扫描全局key的定时任务把key全部遍历一遍,触发已过期的key从内存中删除。
  • 通过自行配置定时任务,在任务执行期间,会对所有缓存实例的主节点进行扫描操作,扫描操作会遍历整个实例的键空间,触发Redis引擎中对Key过期的判断,从而释放已过期的Key,具体操作可参考过期Key扫描
分享:

大Key/热Key分析/过期Key扫描所有常见问题

more

close