Redis中键到达设定的过期时间后并不会马上被删除,这是因为如果是一个存储多个数据的大列表,那么删除时是会阻塞命令执行线程的,这会造成其他命令无法执行,因此Redis采用的是定时删除和懒惰删除兼具的做法。

定时删除

在一个给定时间批量删除过期键,如果键的过期时间基本一致就会带来跟即时删除一样的问题,因此建议设置过期时间时添加随机值。Redis默认每秒会进行十次过期扫描,会从过期字典中随机取出二十个键,删除其中已经过期的,如果已过期的占总数的1/4那么就再进行一次扫描,以此循环,当然Redis默认设置了扫描的最长时间为25ms;

懒惰删除

只有当这个键被访问到时才会删除;