八、Redis key空间通知
redis的key空间通知是实时监控Redis键和值的更改。那什么是key空间通知呢?当客户端执行一些命令,比如 set name Tom,会创建或更新key。此时Redis服务器会将这些事件发布到通道中,客户端可以通过subscribe通道,以便接收以某种方式影响Redis数据集的事件。如果发布/订阅客户端断开连接,然后重新连接,则客户端断开期间传递的所有事件都将丢失。
Keyspace通知是通过为影响Redis数据空间的每个操作发送两种不同类型的事件来实现的。例如,针对数据库0中名为mykey的键的DEL操作将触发两条消息的传递,这与以下两个PUBLISH命令完全等效:
PUBLISH __keyspace@0__:mykey del
PUBLISH __keyevent@0__:del mykey
第一个通道监听所有针对mykey的事件,另一个通道仅监听del操作事件。
默认情况下,key空间事件通知被禁用。可以配置redis.conf的notify keyspace选项或通过CONFIG SET启用通知。将参数设置为空字符串将禁用通知。为了启用该功能,使用了一个由多个字符组成的非空字符串,根据下表,每个字符都有特殊含义:
K 将事件发布到__keyspace@<db>__为前缀的通道中。
E 将事件发布到__keyevent@<db>__为前缀的通道中。
g 启用通用类型的命令,比如:DEL, EXPIRE, RENAME ...
$ String commands
l List commands
s Set commands
h Hash commands
z Sorted set commands
t Stream commands
d Module key type events
x key过期
e key被淘汰出内存
m key不存在
n New key events (Note: not included in the 'A' class)
A "g$lshztxed"的别名
现在通过CONFIG SET命令临时启用配置,在redis-cli中执行:
config set notify-keyspace-events KEA
在执行:
config get notify-keyspace-events
检查配置是否临时生效。
在redis-cli中执行:
psubscribe __keyspace@0__:*
订阅事件。在另一个redis-cli中执行set name tom
。查看:
关闭后重新订阅:
psubscribe __key*
在另一个redis-cli中执行set name tom1
。查看:
现在看到了两条消息。