Redis 是如何使 KEY 过期的?
今天同事突然问我一个问题 - Redis 是如何使处理过期 KEY 的?
我们都知道它会被删除,那它具体是被怎么删除的呢?
于是我去查阅了一下资料,简单地说,Redis 过期策略是这样的:
惰性过期 + 随机读取 key触碰过期
每秒 10 次 * 随机 20 个 key + 超过 25% 过期的话,再次触发
然后下面再详细说一说:
惰性过期:
当 KEY 过期的时候,什么事情都不会发生。仅当客户端尝试查询 KEY 时,它才会被动失效,此时才会删除。
当然,这肯定还不够,因为可能会有过期的某些 KEY 一直不会被查询。
但实际上这些 KEY 是需要删除的。
因此,Redis 会从设置了过期时间的 KEY 里在随机访问几个。并删除其中已过期的 KEY。
具体来说,Redis 会以每秒执行10次的频率执行:
- 从一有过期时间的 KEY 中随机测试 20 个 KEY。
- 删除其中已过期的 KEY。
- 如果有超过25%的KEY已过期,再次回到步骤 1。
这是一个琐碎概率算法,基本上是假设我们的样本可以代表整个 KEY 空间,并且 Redis 会继续尝试,直到可能过期的 KEY 的频率低于25%
换句话说,这意味着在任何给定的时刻,使用内存的已过期的最大KEY数量最大等于每秒最大写操作数量除以4。
还存在于内存里的过期 KEY,最多只会有 Redis 每秒最大写操作数量的 25%。
做下总结的话 Redis 的过期策略就是:
惰性过期 + 随机读取 key 触碰过期
浙公网安备 33010602011771号