密钥上的事件过期



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

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

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

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

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

希望它能很快稳定下来。

顺便说一句,它在帮助您保存过期密钥的值方面不是很有用。触发过期事件时,该值已消失。

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

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

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

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

过期事件是在访问密钥和 被发现被上述系统之一过期,因此 不能保证 Redis 服务器能够生成 生存的关键时间达到 零。如果没有命令持续针对键,并且有很多 与 TTL 关联的密钥,两者之间可能存在明显的延迟 生存密钥时间降至零的时间,以及过期的时间 生成事件。

若要完全实现累积过期事件,可能需要自行实现它。例如,通过使用按过期时间排序的排序列表(或 AVL 树),并连续读取列表的尾部(取消排队)。如果读取器发现尚未达到过期时间,它将进入睡眠状态(过期时间 - 现在)。通过这种方式,精度可以控制在10sms以内。

使用 redis-scheduler .
你可以在这里找到它

最新更新