redis hset和密钥空间通知

时间:2015-04-20 15:21:51

标签: redis

我正在使用Redis 2.8密钥空间发布/订阅通知,我想知道是否有可能在HSET命令之后收到哪个字段发生变化的通知?

目前我收到了关键字的通知 HSET命令,但我最好知道哪个字段已设置 - 我知道一旦收到通知,我就可以再次阅读该集以查看差异,但我发现它并不高效。

3 个答案:

答案 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哈希相关联。然后,当收到通知时,您可以对此特定对象采取措施。

我希望你理解我的答案!抱歉我的英语很差!

如果您还需要其他信息,请告诉我们!