我目前正在处理Redis过期事件
我的目标:在Redis中的数据已经过期之后,获取Value,Field以在下一个过程中做一些事情
所以我找到了Redis密钥空间通知功能允许客户端订阅Redis中的通道以接收影响重置中数据的事件,如Expire
所以我有一些示例代码:https://github.com/toygame/nodejs-redis-keyspace-notifications
subscriber.subscribe("__keyevent@0__:expired")
subscriber.on('message', async(channel, message) => {
// do somethings
console.log(message);
})
Result : Key0
这项工作发现,但我得到的结果是唯一的密钥,我已经设置到redis和过期的
我已经做了一些研究https://medium.com/nerd-for-tech/redis-getting-notified-when-a-key-is-expired-or-changed-ca3e1f1c7f0a
但它只找到了一个事件,也许我可以得到结果,但不是值,字段,我期望
他们无论如何都能得到那些值和字段吗?
FYI。文件https://redis.io/topics/notifications
根据此更新https://stackoverflow.com/a/42556450/11349357
密钥空间通知不报告值,只有密钥的名称和/或执行的命令包含在发布的消息中。其主要依据是Redis值可能会变得相当大。
如果你真的真的需要这种行为,那么实际上这很容易。因为密钥空间通知使用Pub/Sub消息,所以在每次相关操作之后,您可以自己调用PUBLISH,并使用您感兴趣的信息。
看起来我不能使用这个Redis密钥空间,但我必须在我自己的上发布它
您可以使用RedisGears来处理密钥空间通知并获取密钥和值。
您可以用python编写处理代码,并在Redis中注册。例如捕获每个密钥空间事件并存储到流
GearsBuilder()
.foreach(lambda x: execute('XADD', "notifications-stream", '*', *sum([[k,v] for k,v in x.items()],[])))
.register(prefix="person:*", eventTypes=['hset', 'hmset'], mode='sync')
您可以在此处阅读有关此示例的更多信息:https://oss.redis.com/redisgears/examples.html#reliable-密钥空间通知