过期的 key 集合
redis
会将每个设置了过期时间的 key
放入到一个 独立的字典
中,以后会 定时遍历
这个字典来删除到期的 key。
除了定时遍历之外,它还会使用 惰性策略来删除
过期的 key,所谓惰性策略就是在客户端访问这个 key 的时候,redis 对 key的过期时间进行检查,如果过期了就立即删除。
定时删除
是集中处理,惰性删除
是零散处理。
定时扫描策略删除
Redis 默认会每秒进行十次过期扫描,过期扫描不会遍历过期字典中所有的 key,而是采用了一种简单的贪心策略。
-
从过期字典中随机 20 个 key;
-
删除这 20 个 key 中已经过期的 key;
-
如果过期的 key 比率超过 1/4,那就重复步骤 1;
LRU 算法删除
淘汰上次使用时间最早的,且使用次数最少的key
当访问某个元素时,将这个元素移动到头部,所以尾部的都是不被重用的,可以进行淘汰,这个的弊端就是:一个数据长期不使用,突然被访问到以后就到了头部。
Redis 使用的是一种近似 LRU 算法,在现有数据结构的基础上使用随机采样法来淘汰元素