密钥上的事件到期

mar*_*kin 22 publishing redis

我想知道redis中是否有一个功能允许我获取所有过期的密钥(我的意思是某种事件,这使我有机会收回所有过期记录).它的目的是将旧值保存到另一个数据库中.我听说可以使用发布机制,但谷歌无法帮助我们实现这一想法.

Ser*_*sev 20

当前的redis开发版本包含一个新功能:键空间通知.文档:http://redis.io/topics/notifications

Keyspace通知允许客户订阅发布/订阅频道,以便以某种方式接收影响Redis数据集的事件.

可以接收的事件示例如下:

  • 影响给定键的所有命令.
  • 所有密钥都接收LPUSH操作.
  • 所有密钥都在数据库0中到期.

希望它能很快恢复稳定.

顺便说一句,它对帮助您保存过期密钥的值没有多大用处.触发到期事件时,该值已经消失.


小智 9

密钥空间通知生成的内置过期事件不准确.请参阅http://redis.io/topics/notifications的最后一节

具有生存时间关联的密钥由Redis以两种方式过期:

  1. 当命令访问密钥并发现它已过期时.

  2. 通过后台系统,在后台逐步查找过期的密钥,以便能够收集从未访问过的密钥.

当访问密钥并且发现上述系统之一过期时,会生成过期事件,因此无法保证Redis服务器能够在关键时间生成过期事件达到零值.如果没有命令持续定位密钥,并且有许多密钥与TTL相关联,则密钥生存时间降至零的时间与生成过期事件的时间之间可能存在显着延迟.

要完全实现累积过期事件,您可能必须自己实现它.例如,通过使用按到期时间排序的排序列表(或AVL树),并连续读取列表尾部(unqueue).如果读者发现尚未达到过期时间,则会休眠(过期时间 - 现在).通过这种方式,可以在10s ms内控制精度.

  • 实现“自己”并不像看上去那么容易。我们可能还需要考虑跨多个节点的分布。 (3认同)
  • “重大延迟”有多大? (2认同)