Redis的发布订阅的使用方法

一、相关命令概览
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_1
Reading messages... (press Ctrl-C to quit)
1) "subscribe"
2) "message_1"
3) (integer) 1
1) "message"
2) "message_1"
3) "string_1"

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

[root@10-6-3-198 ~]# redis-cli
127.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_1
1) "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_1
1) "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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值