过期键的删除策略
- 定时删除:设置键的过期时间时创建定时器,让定时器在过期时间时直接执行对键的删除
- 惰性删除:放任键过期,只有查询时判断是否过期,过期则删除,不过期则返回
- 定期删除:每隔一段时间,后台会扫描过期数据并进行删除,删多少,检查多少,由算法决定
一三为主动删除,二为被动删除,redis采用惰性和定期两种策略相结合的方式。
方式 | 优点 | 缺点 |
---|---|---|
定时删除 | 内存友好 | cpu不友好 |
惰性删除 | cpu友好 | 内存不友好 |
定期删除 | 折中 | 执行时长、效率、结果不可确定 |
因此redis采用定期与惰性相结合的方式(定时器太昂贵)
标题AOF、RDB和复制功能对过期键的处理
AOF
- aof文件写入不会去看是否过期,只有过期策略执行此键被淘汰会有del命令记录
- 重写时对键进行检查,已经过期的键不会写入aof文件
RDB
- 生成RDB时会检查是否过期,过期键不会被保存
- 载入RDB时主节点会进行过期判断,从节点直接全部载入
主从复制模式下
- 主从复制下,过期键由主节点控制,过期后广播del命令,从节点执行同步命令del
- 从节点接受读请求后及时过期也不主动删除,只接受主节点命令