过期的 key 集合

redis 会将每个设置了过期时间的 key 放入到一个 独立的字典 中,以后会 定时遍历 这个字典来删除到期的 key。

除了定时遍历之外,它还会使用 惰性策略来删除 过期的 key,所谓惰性策略就是在客户端访问这个 key 的时候,redis 对 key的过期时间进行检查,如果过期了就立即删除。

定时删除 是集中处理,惰性删除 是零散处理。

定时扫描策略删除

Redis 默认会每秒进行十次过期扫描,过期扫描不会遍历过期字典中所有的 key,而是采用了一种简单的贪心策略。

  1. 从过期字典中随机 20 个 key;

  2. 删除这 20 个 key 中已经过期的 key;

  3. 如果过期的 key 比率超过 1/4,那就重复步骤 1;

LRU 算法删除

淘汰上次使用时间最早的,且使用次数最少的key

当访问某个元素时,将这个元素移动到头部,所以尾部的都是不被重用的,可以进行淘汰,这个的弊端就是:一个数据长期不使用,突然被访问到以后就到了头部。

Redis 使用的是一种近似 LRU 算法,在现有数据结构的基础上使用随机采样法来淘汰元素

懒惰删除