Redis过期数据清理算法

Redis会周期性的随机测试一批设置了过期时间的key并进行处理。测试到的已过期的key将被删除,具体的算法如下:

    1、Redis配置项hz定义了serverCron任务的执行周期,默认为10,即CPU空闲时每秒执行10次;
    2、每次过期key清理的时间不超过CPU时间的25%,即若hz=1,则一次清理时间最大为250ms,若hz=10,则一次清理时间最大为25ms;
    3、清理时一次遍历所有的db;
    4、从db中随机取20个key,判断是否过期,若过期,则逐出;
    5、若有5个以上key过期,则重复步骤4,否则遍历下一个db;
    6、在清理过程中,若达到了25%CPU时间,退出清理过程。

这是一个基于概率的简单算法,基本的假设是抽出的样本能够代表整个key空间,redis持续清理过期的数据直至将要过期的key的百分比降到25%以下。这也意味着在长期来看任何给定的时刻已经过期但仍占据着内存空间的key的量最多为每秒的写操作量除以4;

    1、由于算法采用的随机取key判断是否过期的方式,故几乎不可能清理完所有的过期key;
    2、适当的调高hz参数(0-500)可以提升清理的频率,过期key可以更及时的被删除,但hz太高会增加cpu时间的消耗;

参考:https://yq.aliyun.com/articles/257459

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 包含的重点内容:JAVA基础JVM 知识开源框架知识操作系统多线程TCP 与 HTTP架构设计与分布式算法数据库知...
    消失er阅读 4,377评论 1 10
  • 五种数据结构简介 Redis是使用C编写的,内部实现了一个struct结构体redisObject对象,通过结构体...
    彦帧阅读 6,986评论 0 14
  • TCP 与 HTTP http1.0 和 http1.1 有什么区别。 HTTP 1.0主要有以下几点变化: 请求...
    冷枫abc阅读 498评论 0 0
  • 【本教程目录】 1.redis是什么2.redis的作者3.谁在使用redis4.学会安装redis5.学会启动r...
    徐猿猿阅读 1,880评论 0 35
  • 当你的移动硬盘需要在mac上拷贝资料时,你会发现,你不能复制文件到移动硬盘。这是因为移动硬盘是使用Windows系...
    逝风不名阅读 39,071评论 4 7