密钥上的事件到期

时间:2013-02-01 13:35:28

标签: redis publishing

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

3 个答案:

答案 0 :(得分:20)

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

  

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

     

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

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

希望它能很快恢复稳定。

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

答案 1 :(得分:9)

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

的最后一部分
  

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

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

  2.   
  3. 通过在后台查找过期密钥的后台系统,   逐步地,以便能够收集永远不会的密钥   访问。

  4.         

    访问密钥时会生成过期事件   发现其中一个上述系统已过期,因此存在   无法保证Redis服务器能够生成   当关键时间到达时的过期事件   零。如果没有命令不断地针对密钥,那么有很多   与TTL相关的键,之间可能存在明显的延迟   生活关键时间降至零的时间和过期时间   事件已生成。

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

答案 2 :(得分:1)

使用redis-scheduler
你可以找到它here