Redis的发布订阅的使用方法

来源:互联网 发布:小葫芦直播平台大数据 编辑:程序博客网 时间:2024/05/22 14:12

一、相关命令概览
1.subscribe 订阅消息
2.psubscribe 利用模式匹配订阅消息
3.publish 发布消息
4.unsubscribe 取消普通订阅
5.punsubscribe 取消模式匹配的订阅
6.pubsub 自省命令

二、发布订阅的作用
发布者无需将消息发送给特定的订阅者,而是将消息发送给某一频道,发布者并不关心订阅者是谁,与此同时,订阅者也不关心它所订阅频道的发布者是谁,只关注它自己订阅的频道消息。这种模式的发布者和订阅者之间不存在耦合关系,允许更大的可移植性和动态网络拓扑。
该功能可以构建即时通信应用,比如网络聊天室(chatroom)和实时广播、实时提醒等。

三、六大命令使用详解
1.subscribe 订阅消息
开启两个redis数据库客户端,开启两个订阅者,均订阅message_1频道。

127.0.0.1:6379> subscribe message_1Reading messages... (press Ctrl-C to quit)1) "subscribe"2) "message_1"3) (integer) 11) "message"2) "message_1"3) "string_1"

2.publish 发布消息
开启了两个redis客户端,分别订阅了message_1这个消息,当发布message_1消息时,返回结果为2,意味着有两个订阅者接收到消息。

[root@10-6-3-198 ~]# redis-cli127.0.0.1:6379> publish message_1 string_1(integer) 2

3.psubscribe 利用模式匹配订阅消息
开启另一个redis客户端,利用模式匹配的方式订阅频道,模式匹配字符串为message*,所以会订阅到message_1这个频道,由于之前已经有两个订阅者,所以此时发布者再发布消息,返回结果为3。

127.0.0.1:6379> psubscribe message*Reading messages... (press Ctrl-C to quit)1) "psubscribe"2) "message*"3) (integer) 1   # 订阅了1个频道1) "pmessage"    # 订阅消息的方式2) "message*"    # 匹配模式字符串3) "message_1"   # 具体匹配的频道4) "string_2"    # 接收到的消息

发布者的状态为:

127.0.0.1:6379> publish message_1 string_2(integer) 3

4.unsubscribe 取消普通订阅
redis的客户端工具并不能实现该操作,订阅频道时,提示press Ctrl-C to quit,但是由于误操作,press Ctril-Z,导致某个redis客户端的订阅者并没有被取消,一直存在着。
解决方法是改变redis.conf配置参数client-output-buffer-limit,该参数的意义是
client-output-buffer-limit pubsub 32mb 8mb 60

5.punsubscribe 取消模式匹配的订阅
redis客户端工具同样不能操作。

6.pubsub 自省命令
pubsub是一种可以检查发布订阅子系统的自省命令。其子命令以及时间复杂度如下:
CHANNELS :O(N) , N 是活跃频道的数量,该命令返回活跃的频道列表。活跃指的是至少被一个订阅者订阅。
由于我已经取消了所有测试订阅,只有之前误操作ctrl+z的订阅者没有取消,所以有一下的结果,message_1频道有2个订阅者没有取消,new_1频道都正确取消了订阅。

127.0.0.1:6379> pubsub channels message_11) "message_1"127.0.0.1:6379> pubsub channels new_1(empty list or set)

NUMSUB :O(N),N是请求统计订阅数数目的频道的数量,下面语句的时间复杂度为O(2)。该语句只能统计非模式匹配类型的订阅者,如果语句中的订阅者包括*,则统计的结果为0,想要统计模式匹配的订阅者,需要使用NUMPAT子命令。

127.0.0.1:6379> pubsub numsub new_1 message_11) "new_1"2) "0"3) "message_1"4) "2"127.0.0.1:6379> pubsub numsub new_1 message_*1) "new_1"2) "0"3) "message_*"4) "0"

NUMPAT :O(1),统计模式所有匹配订阅者的数量。该命令无需频道或者模式匹配参数。返回所有订阅者的数量。

127.0.0.1:6379> pubsub numpat(integer) 2
原创粉丝点击