Redis hset和key space通知

4

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

目前,我作为HSET命令的结果接收关于键的通知,但我更想知道设置了哪个字段 - 我知道一旦收到通知,我可以再次读取设置以查看差异,但我认为这不是非常高效的方法。


1
如果你正在使用 StackExchange.Redis,我已经开始编写一个 IDatabase 实现,可以触发自定义通知,包括所触及的哈希字段的名称。你也可以为你使用的任何 Redis 库执行相同的操作。https://github.com/johnnycardy/StackRedis.L1/tree/master/StackRedis.L1.Notifications - johnnycardy
2个回答

5

标准的Redis键空间通知不包括有关更改的数据的信息,特别是不包括有关所涉及的哈希字段的信息。


我意识到了。那么就没有希望了吗?我应该怎么做才能实现我想要的东西呢? - mguijarr
3
总有希望-请不要绝望 :) 除了仅使用通知之外,您可以在哈希中使用另一个字段,用于存储最近更改的字段名称。当然,您的应用程序需要将其更新,并且您的通知订阅者始终有可能错过一个或多个更新,但对于简单的发布订阅也是如此,所以我想您可以接受这一点。 - Itamar Haber

1
虽然这不是你想要的,但仍然可以用作解决方法。 尝试使用唯一的哈希键名称,例如:
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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接