惰性删除
当客户端发送命令请求时,服务端会先通过expireIfNeeded()方法,进行判断key是否过期,如果key过期就进行删除,然后在进行后续命令操作.
2....带着这个问题,我们看下redis是如何清理过期Key的.
2.1 key清理周期设置
周期设置主要是受「hz」参数控制,默认值为10,表示每秒进行10次后台任务,当值调大时,能回收更多的key,但也会消耗更多的...hz等于10时,则一次清理时间最大为1s/10*25%=25ms.
(3) 依次遍历每个库中执行过期Key清理.
(4) 从一个库中随机抽取20个key,判断是否过期,若过期,则删除过期key....若有1/4以上key过期,则重复该步骤,否则遍历下一个库.
在清理过程中,若达到了最大清理时间,则退出清理过程.
了解了上述清理过程也就清楚了,为什么redis每次都是删除部分过期key了.....
// 计算每次回收时间上限
timelimit = 1000000*ACTIVE_EXPIRE_CYCLE_SLOW_TIME_PERC/server.hz/100;
...