我想将Redis用作远程计时器服务器。我需要的是一种从一台服务器安排计时器的方法,并在所有其他服务器上触发此计时器时收到通知。
我已经使用过期的密钥和密钥空间通知实现了这种机制,它可以正常工作。
问题在于配置EXPIRE机制的方式,当我有很多计时器时,它们可能无法触发...(http://redis.io/commands/expire)
我想知道是否有办法将25%的过期规则更改为其他内容以确保所有定时器都会被触发?我可以延迟1-2秒但我需要所有的计时器才能开火。
我记得在某个地方看到这个参数是可配置的,但我找不到它的文档..
答案 0 :(得分:1)
您不能设置选项以强制redis一次使所有键失效,但您可以将选项设置为尽可能接近它。请记住how redis expire works。 用两个词来说:
具体来说,这就是Redis每秒做10次的事情:
- 使用相关过期的密钥集测试20个随机密钥。
- 删除所有已过期的密钥。
- 如果超过25%的密钥已过期,请从步骤1重新开始。
醇>
您可以在redis配置文件中使用10 times
选项更改此hz
行为。从原始文档:
Redis调用内部函数来执行许多后台任务, 比如在超时时关闭客户端的连接,清除过期的密钥 从未被要求过,等等。
并非所有任务都以相同的频率执行,但Redis会检查 根据指定的" hz"执行任务。值。
默认" hz"设置为10.提高值时将使用更多的CPU Redis闲置,但同时会让Redis更具响应性 有许多键同时到期,超时可能是 处理更精确。
所以你可以改变100甚至1000.这意味着 - 1000不低于每秒20,000个密钥将过期。重要的是要了解如果你有很多计时器,你的redis实例会在空闲状态下占用大量的CPU。