八、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。查看:

现在看到了两条消息。

posted @ 2024-10-04 17:24  shigp1  阅读(15)  评论(0编辑  收藏  举报