redis读书笔记九 KeySpace通知

客户端可以订阅特定的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"
...

 

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值