Redis的过期删除和内存淘汰
大约 1 分钟
Redis的过期删除和内存淘汰
过期字典
哈希表
struct{ key,expired_timestamp }
key存在过期字典之中且 system_timestamp > expired_timestamp 表示已经过期
过期删除策略
定时(设置key过期就针对这个key创建定时事件,CPU开销大但内存删除很及时)
惰性(key被访问时如果过期了就删除)
定期(隔段时间随机检查一定数量的key过期就删除)
Redis的是 惰性 + 定期
间隔每秒10次 (redis.conf.hz 10)
随机抽查的数量20 (过期数量>25%就立刻再查一次)
内存淘汰策略
redis运行内存达到阙值就会删除符合条件的key
内存阙值
redis.conf.maxmemory
64bit system default 0 无限制
32bit system default 3G
默认是不进行内存淘汰,达到阙值后不再提供服务直接返回错误
redis.conf.maxmemory-policy
noeviction 不淘汰而是拒绝服务(Reids3.0 之后默认)
volatile-random 设置了过期的随机淘汰
volatile-ttl 优先早过期的淘汰
allkeys-lru 淘汰最少使用的(important)
allkeys-random 随机淘汰
LRU算法( Least Recently Used ) 最近最少使用
链表实现
访问过的数据移动到链表头部