2013-02-01 76 views
15

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

+0

它不是上述评论的链接相同。那个是关于会议的。这篇文章是关于易失性密钥。 – akonsu

回答

18

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

Keyspace通知允许客户订阅Pub/Sub通道,以便以某种方式接收影响Redis数据集的事件。这是可能的接收有以下事件

例子:

  • 所有影响到某个键的命令。
  • 接收LPUSH操作的所有密钥。
  • 数据库中的所有到期的0.1

希望的钥匙,它很快就会使其稳定。

顺便说一句,它不会帮助您保存过期密钥的值非常有用。当到期事件被触发时,该值已经消失。

9

由密钥空间通知生成的内置过期事件不准确。见一起生活相关的两种方式是通过Redis的过期时间http://redis.io/topics/notifications

键的最后一节:

  1. 当密钥由命令访问,发现过期。

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

当一个键被访问和 发现由上述系统中的一个过期生成呼出事件,其结果是有 不能保证Redis的服务器将能够产生 在关键时间到达 零的时间到期事件。如果没有命令持续关注密钥,并且存在多个与TTL关联的密钥,则密钥生存时间下降到零的时间与生成到期的 事件的时间之间可能存在显着延迟。

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

1

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