Redis删除过期数据的策略概要

Redis 如何在删除过期数据时,兼顾性能和内存容量?

1、正常思路

1-1、定时删除

定时扫描所有键值对,发现过期数据立即删除。

优点:内存空间清理及时,有垃圾数据立即清除,确保了Redis的可用容量。

缺点:浪费CPU算力,对Redis中的所有数据进行全局遍历是一件危险的事情,应该尽力避免。这种做法会影响Redis的性能(吞吐量)。

1-2、懒惰删除

数据过期后不做任何处理,每次被读取时先判断该数据是否过期,过期即删。

优点:性能优异,不影响Redis的正常操作。

缺点:可能会在内存中堆积大量过期数据,占用存储空间(极端情况:有些数据创建以后再也不会访问了),这实际上相当于内存泄漏。

2、Redis的策略

这是一个基于概率的简单策略,假设抽出的样本能够代表整个Redis存储空间。

  1. Redis使用独立的字典存储设定了过期时间(expire)的数据的key,避免在各种操作时触发全局遍历。
  2. Redis 默认每秒进行 10 次过期扫描,从过期字典中随机选取 100 个 key,删除其中已过期的数据。
  3. 如果上述扫描中发现过期 key 的比例超过 25%,则立即再发动一次扫描;直至比例降低到 25% 以下。
  4. 为保证过期扫描不会阻塞正常请求,CPU时间每秒钟最多占用250ms。

以上的每秒扫描次数,以及每秒最多占用的CPU时间,均受到配置文件 redis.conf 中的 hz 参数影响。

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 本文对Redis的过期机制简单的讲解一下讲解之前我们先抛出一个问题,我们知道很多时候服务器经常会用到redis作为...
    小陈阿飞阅读 1,374评论 0 0
  • NOSQL类型简介键值对:会使用到一个哈希表,表中有一个特定的键和一个指针指向特定的数据,如redis,volde...
    MicoCube阅读 4,160评论 2 27
  • 今天看了冰叔的好吗好的。其中有一篇说了果子的。有那么一句话:就好像没有带上保护伞,就一下子坠落下去。一直往下。看到...
    vaccinen阅读 310评论 0 0
  • 文樱之思 今天听到一本特别好的书,就是樊登读书会作者光临版块的《关键期关键帮助》。这本书是李跃儿老师写的,李跃儿老...
    樱之思阅读 1,677评论 0 2
  • 学东西学到呕吐了,码代码的非常难受,此刻,只能用两个字概括我的感受就是“呕吐”。相当的难受,感觉脑子再装一点东西,...
    a6dba64ebe2a阅读 158评论 0 0

友情链接更多精彩内容