Redis过期key是怎么样清理的?
1 个回答
重新审视自己,什么使你快乐,什么就是眼下最珍贵。东方朔### (1)惰性清除 在访问key时,如果发现key已经过期,那么会将key删除。 ### (2)定时清理 Redis配置项hz定义了serverCron任务的执行周期,默认每次清理时间为25ms,每次清理会依次遍历所有DB,从db的expires字典(里面保存了设置了过期时间的键值对,key就是指向键对象,value是过期时间)中随机取出20个key,如果过期就删除,如果其中有5个key过期,说明过期率超过了25%,那么就继续对这个db进行清理,否则开始清理下一个db。 ### (3)内存不够时清理 当执行写入命令时,如果发现内存不够,那么就会按照配置的淘汰策略清理内存,淘汰策略一般有6种,Redis4.0版本后又增加了2种,主要由分为三类 #### 第一类 不处理,等报错(默认的配置) noeviction,发现内存不够时,不删除key,执行写入命令时发现内存不够直接返回错误信息。(Redis默认的配置就是noeviction) #### 第二类 从所有结果集中的key中挑选,进行淘汰(随机,lru,lfu三种) allkeys-random 就是从所有的key中随机挑选key,进行淘汰 allkeys-lru 就是从所有的key中挑选最近使用时间距离现在最远的key,进行淘汰 allkeys-lfu 就是从所有的key中挑选使用频率最低的key,进行淘汰。(这是Redis 4.0版本后新增的策略) ### 第三类 从设置了过期时间的key中挑选,进行淘汰(随机,lru,ttl,lfu) 这种就是从设置了expires过期时间的结果集中选出一部分key淘汰,挑选的算法有: volatile-random 从设置了过期时间的结果集中随机挑选key删除。 volatile-lru 从设置了过期时间的结果集中挑选上次使用时间距离现在最久的key开始删除 volatile-ttl 从设置了过期时间的结果集中挑选可存活时间最短的key开始删除(也就是从哪些快要过期的key中先删除) volatile-lfu 从过期时间的结果集中选择使用频率最低的key开始删除(这是Redis 4.0版本后新增的策略)发布于 2022-02-12 03:00 •IP属地 湖北举报评论收藏
公众号进入网站体验更佳

