配置Redis过期算法

时间:2015-10-27 14:00:10

标签: redis

我想将Redis用作远程计时器服务器。我需要的是一种从一台服务器安排计时器的方法,并在所有其他服务器上触发此计时器时收到通知。

我已经使用过期的密钥和密钥空间通知实现了这种机制,它可以正常工作。

问题在于配置EXPIRE机制的方式,当我有很多计时器时,它们可能无法触发...(http://redis.io/commands/expire

我想知道是否有办法将25%的过期规则更改为其他内容以确保所有定时器都会被触发?我可以延迟1-2秒但我需要所有的计时器才能开火。

我记得在某个地方看到这个参数是可配置的,但我找不到它的文档..

1 个答案:

答案 0 :(得分:1)

您不能设置选项以强制redis一次使所有键失效,但您可以将选项设置为尽可能接近它。请记住how redis expire works。 用两个词来说:

  

具体来说,这就是Redis每秒做10次的事情:

     
      
  1. 使用相关过期的密钥集测试20个随机密钥。
  2.   
  3. 删除所有已过期的密钥。
  4.   
  5. 如果超过25%的密钥已过期,请从步骤1重新开始。
  6.   

您可以在redis配置文件中使用10 times选项更改此hz行为。从原始文档:

  

Redis调用内部函数来执行许多后台任务,   比如在超时时关闭客户端的连接,清除过期的密钥   从未被要求过,等等。

     

并非所有任务都以相同的频率执行,但Redis会检查   根据指定的" hz"执行任务。值。

     

默认" hz"设置为10.提高值时将使用更多的CPU   Redis闲置,但同时会让Redis更具响应性   有许多键同时到期,超时可能是   处理更精确。

所以你可以改变100甚至1000.这意味着 - 1000不低于每秒20,000个密钥将过期。重要的是要了解如果你有很多计时器,你的redis实例会在空闲状态下占用大量的CPU。