自学内容网 自学内容网

Redis的过期删除策略

1.基本概念:

        Redis 的过期删除策略主要用于管理具有过期时间的键,确保在键过期后适时清除以释放内存。Redis 的过期删除策略主要分为三种方式。

2.惰性删除(Lazy Deletion)

        Redis 不主动去删除过期的键,而是在键被访问时才检查它是否过期。如果过期,立即删除并返回空结果。

  • 优点:降低了不必要的内存删除操作,节省 CPU 资源。
  • 缺点:如果某些键从不被访问,过期后也不会被删除,可能会导致内存占用增多。

3.定期删除(Periodic Deletion)

        Redis 会定期随机抽取一部分设置了过期时间的键,检查它们是否过期,并删除过期的键。默认情况下,Redis 每秒执行 10 次这样的检查(可以通过 hz 参数配置频率)。

  • 优点:可以清除未被访问的过期键,防止内存过多占用。
  • 缺点:是抽样的方式,部分过期键可能会因为没被抽到而延迟删除。

4.定期删除流程

        Redis 定期删除策略并不会遍历删除每个过期键,而是采用随机抽取的方式删除过期键,同时为了保证过期扫描不影响 Redis 主业务,Redis 的定期删除策略中还提供了最大执行时间,以保证 Redis 正常并高效的运行。

Redis 定期删除流程如下:

        (1).从设置了过期时间的字典中随机取出 20 个键;

        (2).删除这 20 个键中过期的键;

        (3).如果过期 key 的比例超过 25% ,重复步骤 (1)

        同时为了保证过期扫描不会出现循环过度,导致线程卡死现象,算法还增加了扫描时间的上限,默认不会超过 25ms。 

5.内存淘汰(Eviction Policy)

        当 Redis 内存达到上限时,会根据配置的策略选择删除某些键,以腾出空间给新数据。常见的策略有:

  • volatile-lru:从设置了过期时间的键中,使用最近最少使用(LRU)策略淘汰。
  • allkeys-lru:从所有键中,使用 LRU 策略淘汰。
  • volatile-random:从设置了过期时间的键中随机淘汰。
  • allkeys-random:从所有键中随机淘汰。
  • volatile-ttl:优先淘汰最近要过期的键。
  • noeviction:不删除任何键,当内存满时,新写入操作会报错。

总结:

        通过结合惰性删除、定期删除和内存淘汰策略,Redis 能在不同场景下灵活管理键的过期和删除,保证内存的高效利用


原文地址:https://blog.csdn.net/m0_74064008/article/details/142456116

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!