两种过期策略
Redis将过期时间存储在一个过期字典中,处理过期键的策略分为两种:
- 积极的方式(an active way):定时扫描过期字典,判断存储在过期字典中的键key是否已经过期,清理过期的键key。
- 消极的方式(a passive way):平时对过期的键不进行处理,只有当Redis接受到访问请求,获取键key时候,去过期字典中检查键key是否已经过期,如果过期删除键key,未过期则正常返回。
两种策略都有利弊,积极的方式可以保证过期的键被尽快清除,节省内存,却对CPU不友好,占用了系统CPU时间,无疑会降低系统的吞吐量;消极的方式刚好相反,节约了CPU时间,却因为大量过期的键不能及时清除导致内存浪费。
Redis键过期策略
Redis结合了积极和消极两种方式,最大限度利用两者的优点,规避缺陷。下面介绍一个Redis官网介绍的清理过期键的算法——A trivial probabilistic algorithm。算法的Redis官网介绍
- 算法执行每秒扫描10次;
- 在过期字典中随机测试20个键
- 删除20个键中过期的键
- 如果删除的过期键数量占测试的总键数百分率超过25%(20*25%=5,换言之如果过期键超过5个),则返回第2步再次执行。
网友评论