编辑
2023-10-22
缓存中间件
0
请注意,本文编写于 209 天前,最后修改于 51 天前,其中某些信息可能已经过时。

目录

过期键的删除策略
Redis的缓存淘汰策略

过期键的删除策略

1、定时删除:在设置键的过期时间的同时,创建一个定时器(timer),让定时器在键的过期时间来临时,立即执行对键的删除操作。

2、惰性删除:放任键过期不管,但是每次从键空间中获取键时,都检查取得的键是否过期,如果过期的话,就删除该键;如果没有过期,就返回该键。

3、定期删除:每隔一段时间,程序就对数据库进行一次检查,删除里面的过期键。至于要删除多少过期键,以及要检查多少个数据库,则由算法决定。

Redis选用的就是定期删除,它内部维护的定时任务,默认每秒运行10次。定时任务中删除过期逻辑采用了自适应算法,根据键的过期比例、使用快慢两种速率模式回收键。定时任务在每个数据库空间随机检查20个键,当发现过期时删除对应的键,如果超过检查数25%的键过期,循环执行回收逻辑直到不足25%或运行超时为止,慢模式下超时时间为25ms,如果之前回收键逻辑超时,则在Redis触发内部事件之前再次以快模式运行回收过期键任务,快模式下超时时间为1ms且2s内只能运行1次,快慢两种模式内部删除逻辑相同,只是执行的超时时间不同。

Redis的缓存淘汰策略

1)noeviction:默认策略,不会删除任何数据,拒绝所有写入操作并返回客户端错误信息。[在生产环境中不允许使用这个此策略]

2)volatile-lru:根据LRU算法删除设置了超时属性的键,直到腾出足够空间为止。如果没有可删除的键对象,回退到noeviction策略。

3)allkeys-lru:根据LRU算法删除键,不管数据有没有设置超时属性,直到腾出足够空间为止。[生产环境一般是使用此种策略]

4)allkeys-random:随即删除所有键,直到腾出足够空间为止。

5)volatile-ranodm:随即删除过期键,直到腾出足够空间为止。

6)volatile-ttl:根据键值对象的ttl属性,删除最近将要过期数据,如果没有,回退到noeviction策略。

7)volatil-lfu:根据LFU算法删除设置了超时属性的键。

8)allkeys-lfu:根据LFU算法删除键,不管数据有没有设置超时属性,直到腾出足够空间为止。

本文作者:whitebear

本文链接:

版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!