redis keyspace 消息通知

redis keyspace / keyevent 提供了key变更通知能力。

前言

redis提供了监听key变更(新增、修改、删除等)通知的能力。通过订阅(subscribe)键空间主题即可。

对应有2个主题:

  • __keyspace@database__:KeyPattern
  • __keyevent@database__:OpsType

对于每个修改数据库的操作,键空间通知都会发送两种不同类型的事件消息:keyspace 和 keyevent。以 keyspace 为前缀的频道被称为键空间通知(key-space notification), 而以 keyevent 为前缀的频道则被称为键事件通知(key-event notification)。

因为 Redis 目前的订阅与发布功能采取的是发送即忘(fire and forget)策略, 所以如果你的程序需要可靠事件通知(reliable notification of events), 那么目前的键空间通知可能并不适合你:当订阅事件的客户端断线时, 它会丢失所有在断线期间分发给它的事件。并不能确保消息送达。

开启配置

键空间通知会带来额外的性能消耗,因此默认是关闭状态。 为了开启键空间通知,需要修改配置文件:

notify-keyspace-events "KEA"

具体选项有:

选项 详情
K Keyspace events, published with keyspace@ prefix.
E Keyevent events, published with keyevent@ prefix.
g Generic commands (non-type specific) like DEL, EXPIRE, RENAME, …
$ String commands
l List commands
s Set commands
h Hash commands
z Sorted set commands
t Stream commands
x Expired events (events generated every time a key expires)
e Evicted events (events generated when a key is evicted for maxmemory)
A Alias for g$lshztxe, so that the “AKE” string means all the events.

K、E必须至少填写一个,否则不生效。 另外,选项要带有双引号,否则不生效。

订阅键空间通知

subscribe 或者 psubscribe (支持模式匹配) 订阅对应话题。

127.0.0.1:6379> subscribe __keyspace@0__:xx
Reading messages... (press Ctrl-C to quit)
// 执行订阅命令
1) "subscribe"
2) "__keyspace@0__:xx"
3) (integer) 1

// 以下操作在另一个窗口进行
// set xx 1
1) "message"
2) "__keyspace@0__:xx"
3) "set"

// expire xx 3
1) "message"
2) "__keyspace@0__:xx"
3) "expire"

1) "message"
2) "__keyspace@0__:xx"
3) "expired"

参考

Built with Hugo
Theme Stack designed by Jimmy