当前位置:嗨网首页>书籍在线阅读

23-按照规则订阅

  
选择背景色: 黄橙 洋红 淡粉 水蓝 草绿 白色 选择字体: 宋体 黑体 微软雅黑 楷体 选择字体大小: 恢复默认

4.4.5 按照规则订阅

除了可以使用 SUBSCRIBE 命令订阅指定名称的频道外,还可以使用 PSUBSCRIBE 命令订阅指定的规则。规则支持glob风格通配符格式(见3.1节),下面我们新打开一个redis-cli实例C进行演示:

redis C> PSUBSCRIBE channel.?* Reading messages... (press Ctrl-C to quit)
1) "psubscribe"
2) "channel.?*"
3) (integer) 1

规则channel.?*可以匹配channel.1channel.10,但不会匹配channel.。这时在实例B中发布消息:

redis B> PUBLISH channel.1 hi! (integer) 2

返回结果为2是因为实例 A 和实例 C 两个客户端都订阅了 channel.1 频道。实例 C 接收到的回复是:

1) "pmessage"
2) "channel.?*"
3) "channel.1"
4) "hi!"

第一个值表示这条消息是通过 PSUBSCRIBE 命令订阅频道而收到的,第二个值表示订阅时使用的通配符,第三个值表示实际收到消息的频道命令,第四个值则是消息内容。

提示

使用 PSUBSCRIBE 命令可以重复订阅一个频道,如某客户端执行了 PSUBSCRIBE channel.? channel.?* ,这时向 channel.2 发布消息后该客户端会收到两条消息,而同时 PUBLISH 命令返回的值也是 2 而不是 1 。同样的,如果有另一个客户端执行了 SUBSCRIBE channel.10PSUBSCRIBE channel.?* 的话,向 channel.10 发送命令该客户端也会收到两条消息(但是是两种类型: messagepmessage ),同时 PUBLISH 命令会返回 2

PUNSUBSCRIBE 命令可以退订指定的规则,用法是 PUNSUBSCRIBE [pattern [pattern …]] ,如果没有参数则会退订所有规则。

注意

使用 PUNSUBSCRIBE 命令只能退订通过 PSUBSCRIBE 命令订阅的规则,不会影响直接通过 SUBSCRIBE 命令订阅的频道;同样 UNSUBSCRIBE 命令也不会影响通过 PSUBSCRIBE 命令订阅的规则。另外容易出错的一点是使用 PUNSUBSCRIBE 命令退订某个规则时不会将其中的通配符展开,而是进行严格的字符串匹配,所以 PUNSUBSCRIBE * 无法退订 channel.* 规则,而是必须使用 PUNSUBSCRIBE channel.* 才能退订。