Redis的过期键删除策略
一,过期删除策略
redis数据库键的过期时间都保存在过期字典中,根据系统时间和存活时间判断是否过期。
redis有三种不同的删除策略:
1,定时删除:实现方式,创建定时器
2,惰性删除:每次获取键时,检查是否过期
3,定期删除:每隔一段时间,对数据库进行一次检查,删除过期键,由算法决定删除多少过期键和检查多少数据库
二,优缺点
1,定时删除,对内存友好,但是对cpu很不友好
2,惰性删除,对cpu友好,对内存很不友好
3,定期删除,是两种折中,但是,如果删除太频繁,将退化为定时删除,如果删除次数太少,将退化为惰性删除。
三,算法
1,惰性删除
策略由expireIfNeeded函数实现,所有读写命令在执行之前都会调用该函数进行检查,键写入和获取过程如图所示:
2,定时删除
删除策略由activeExpireCycle算法决定
关键点,遍历数据库,如果时间到,则终止;遍历数据库接着上次的进度,直到所有数据库遍历完,再接着遍历;遍历库时候,随机取出一定数量的随机键
四,RDB和AOF时过期键的处理
1,RDB生成时,过期键会被过滤
RDB载入时,以主服务器运行,则过滤过期键
以从服务器运行,则忽略过期键,不做处理
2,AOF生成时,如果过期键还没被删除,则忽略,当被删除以后,会追加记录一条DEL命令
AOF载入时,过期键会被过滤