Redis过期键的删除策略
常见的对于过期键的删除策略有以下几种:
定时删除
在设置每个键的时候,设置一个timer,到期就删除该键
- 优点:对内存有效,及时删除过期键
- 缺点:对cpu不友好,当过期键多的时候,删除过期键这一行为会占用很多cpu
惰性删除
只在读取键时,对过期时间进行判断,如果过期就删除,不过期就返回该键。
- 优点: 对CPU友好
- 缺点:对内存不友好,对于过期的键,不能及时删除,很可能造成过期键堆积。
定期删除
前两种方式的折中,每隔一段时间执行一次过期键的删除策略,通过限制删除过期键的时长和频率来减少删除操作对CPU时间的影响。
Redis中的策略
Redis中对于过期键的删除策略为惰性删除和定期删除策略的结合。
Redis如何保存过期键
在数据库的 RedisDb 结构中保存了一个名为 expires的字典,字典的键为指向某个键对象,字典的值为一个毫秒级的 unix 时间戳。
RDB、AOF对过期键的处理
- 生产RDB文件时,跳过过期键,载入RDB文件时,主服务器跳过过期键,从服务器载入(难以理解)。
- AOF重写时,跳过过期键,AOF写入时(服务器以AOF持久化模式运行),对过期键不做处理,
本文章总结于黄健宏老师的《Redis设计与实现》