我正在使用Redis 2.8密钥空间发布/订阅通知,我想知道是否有可能在HSET
命令之后收到哪个字段发生变化的通知?
目前我收到了关键字的通知
HSET
命令,但我最好知道哪个字段已设置 - 我知道一旦收到通知,我就可以再次阅读该集以查看差异,但我发现它并不高效。
答案 0 :(得分:4)
标准Redis键空间通知不包含有关更改数据的数据,特别是不包含有关已触摸的哈希字段的信息。
答案 1 :(得分:0)
虽然这不是您想要的,但它仍然可以用作解决方法。 尝试使用唯一的哈希键名称,例如:
redis.hmset('task:{}'.format(unique_id), status='running')
当您收到消息时,它将如下所示:
(b'__keyspace@0__:task:c81b8373-b5ea-4be0-b8f1-b490e7280898', 'hset')
现在,知道唯一的任务ID,你可以这样做:
redis.hget('task:{}'.format(unique_id), 'status')
> running
答案 2 :(得分:-1)
我不知道你是否已经找到了一种解决方案,但我想分享我使用Redis和NodeJS的方式。
我创建了一个redis客户端:
var client = redis.createClient(redis_options);
因此,当redis通知到来时,此客户端将收到消息。 (redis服务器配置为执行此操作 - > redis-cli config set notify-keyspace-events KEA
- https://redis.io/topics/notifications)
client.on('pmessage', function(pattern, channel, message) {
在这里,'pmessage'事件为我们提供了三个参数(https://www.npmjs.com/package/redis):
pattern:已生成密钥的模式 channel:您正在收听的频道('__ keyspace @ 0 __:' + hash) 消息:在redis中执行的操作(e: hset )
因此,如果你有一个像字典这样的对象将一个对象(你希望在通知到达时更新)与redis哈希相关联。然后,当收到通知时,您可以对此特定对象采取措施。
我希望你理解我的答案!抱歉我的英语很差!
如果您还需要其他信息,请告诉我们!