当前位置: 首页 > 工具软件 > Keyspace > 使用案例 >

redis读书笔记九 KeySpace通知

阎晗日
2023-12-01

客户端可以订阅特定的PUB/SUB 通道,当redis的dataset 发生改变时,redis就会向这些通道发送通知。会发送通知的操作如下

  • 影响key的命令
  • 收到LPUSH命令的key

  • 在database0过期的key

redis的订阅功能不可靠,如果订阅了某个通道的客户端断开了连接,那么及时后面这个客户端重新连接,断线期间的通知客户端也收不到了,所以如果你的系统要求可靠的通知,那么不建议使用redis。

1、keyspace通知由两个方面组成,每个影响dataset的操作,都会向两个通道发送通知,一个通道表示执行了什么操作,另一个通道表示操作了哪个key。例如在database0 执行DEL mykey 命令,会触发两条消息

PUBLISH __keyspace@0__:mykey del
PUBLISH __keyevent@0__:del mykey

keyspace 通道收到的消息内容是操作的类型

keyevent 通道收到的消息内容是 操作的key的name

这两个通道可以配置是否开启。

2、通知配置

默认情况下,keypace通道的通知是被禁止的,因为这个通知耗费cpu资源。

在redis.conf 中配置开启哪些通知,格式: notify-keyspace-events 参数

K     Keyspace events, published with __keyspace@<db>__ prefix.
E     Keyevent events, published with __keyevent@<db>__ 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
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$lshzxe, so that the "AKE" string means all the events.

如果参数为空,表示关闭这个功能。如要开启通知功能,参数中必须要有K或A,否则即使带上其它的参数也是无效的。

3、如何测试订阅通知

$ redis-cli config set notify-keyspace-events KEA
$ redis-cli --csv psubscribe '__key*__:*'
Reading messages... (press Ctrl-C to quit)
"psubscribe","__key*__:*",1

在其他的窗口中,执行SET foo hello命令 

"pmessage","__key*__:*","__keyspace@0__:foo","set"
"pmessage","__key*__:*","__keyevent@0__:set","foo"
...

 

 

 类似资料: