Redis如何处理过期的缓存key

说明

最近在查找Redis的key过期策略相关的资料,发现网上的中文内容大部分都是互相复制的,后来换了英文搜索,觉得还是官方文档才是权威。本文就是译自其中介绍过期缓存key的处理算法的内容。

译文

Redis通过两种方式来处理过期的key:被动方式和主动方式。
当客户端尝试访问某个key时,如果Redis发现该key已经超时了,此时该key会被过期。
当然,这么做是不够的,毕竟有些key可能永远不会被再次访问。由于这些key也应该被过期,Redis会定时随机测试部分key看是否要将其过期。所有过期的key都将被从key空间里删除。
Redis每秒会做10次以下的步骤:

  1. 随机测试20个key进行相关的过期检测。
  2. 删除所有已过期key。
  3. 如果超过25%的key都过期了,重新开始步骤1。

这是一个很简单的概率算法,其基本思想是:假设我们的随机样本代表了整个key集,然后我们不断让那些可能需要被过期的key都过期掉,直到这个比例低于25%
也就是说,在任意一个时间内存里已过期的key的量的最大值为每秒最大写入操作量除以 4。

原文

How Redis expires keys