我想知道redis中是否有一个功能可以让我获得所有过期的密钥(我的意思是某种事件,这让我有机会收回所有过期记录)。它的目的是将旧值保存到另一个数据库中。我听说可以使用发布机制,但谷歌无法帮助我们解决这个问题。
答案 0 :(得分:20)
redis的当前开发版本包含一项新功能:键空间通知。文档:http://redis.io/topics/notifications
Keyspace通知允许客户订阅发布/订阅频道,以便以某种方式接收影响Redis数据集的事件。
可以接收的事件示例如下:
- 影响给定密钥的所有命令。
- 所有接收LPUSH操作的密钥。
- 所有密钥都在数据库0中过期。
希望它能很快恢复稳定。
顺便说一句,它对帮助您保存过期密钥的值没有多大帮助。当触发到期事件时,该值已经消失。答案 1 :(得分:9)
密钥空间通知生成的内置过期事件不准确。请参阅http://redis.io/topics/notifications
的最后一部分具有生存时间关联的密钥由Redis以两种方式过期:
当命令访问密钥并发现密钥已过期时。
- 醇>
通过在后台查找过期密钥的后台系统, 逐步地,以便能够收集永远不会的密钥 访问。
访问密钥时会生成过期事件 发现其中一个上述系统已过期,因此存在 无法保证Redis服务器能够生成 当关键时间到达时的过期事件 零。如果没有命令不断地针对密钥,那么有很多 与TTL相关的键,之间可能存在明显的延迟 生活关键时间降至零的时间和过期时间 事件已生成。
要完全实施累积过期事件,您可能必须自己实施。例如,通过使用按到期时间排序的排序列表(或AVL树),并连续读取列表尾部(unqueue)。如果读者发现没有达到过期时间,它就会休眠(过期时间 - 现在)。通过这种方式,可以在10秒内控制精度。
答案 2 :(得分:1)
使用redis-scheduler
。
你可以找到它here