介绍
Redis订阅发布模型比较简单,结构如下:
消息通道(channel)作为消息中转站,它不关心消息的发布者(publisher)是谁,也不关心订阅者(subscriber)有没有成功的消费掉消息。publisher负责发送消息,subscriber负责接收消息。
命令介绍
Redis订阅发布核心的两个命令就是: SUBSCRIBE 和 PUBLISH。
顾名思义,SUBSCRIBE 就是订阅消息,PUBLISH 就是发布消息。
Tips:订阅消息会阻塞连接,一旦开启订阅就不能执行其他的命令(订阅发布命令除外)。
订阅消息(SUBSCRIBE)
SUBSCRIBE channel [channel...]
channel 表示消息通道。消息通道可以是一个,也可以是多个,多个消息通道之间用空格隔开。一个消息通道同时可以被多个客户端订阅,消息通道对于客户端来说是共享的,非独享。
打开终端,连接到Redis服务器:
weis-MacBook-Pro:~ weihan$ redis-cli
127.0.0.1:6379>
接着输入如下命令,订阅消息通道 chatroom :
127.0.0.1:6379> subscribe chatroom
Reading messages... (press Ctrl-C to quit)
1) "subscribe"
2) "chatroom"
3) (integer) 1
出现上面显示就表示已成功订阅消息通道 chatroom 的消息,数字1表示连接成功。此时可以看到当前连接处在阻塞状态,可以按 Ctrl + C
键退出订阅状态。
发布消息(PUBLISH)
PUBLISH channel message
channel 表示消息通道
message 表示待发布的消息内容
重新打开一个终端,连接到Redis服务器,并输入下面命令:
127.0.0.1:6379> publish chatroom "Hi"
(integer) 1
上面的命令表示向消息通道 chatroom 中发布一条 Hi 的文本消息。数字1表示成功收到消息的订阅者数量。
接着切换到刚刚订阅消息的终端,可以看到下面消息:
127.0.0.1:6379> subscribe chatroom
Reading messages... (press Ctrl-C to quit)
1) "subscribe"
2) "chatroom"
3) (integer) 1
1) "message"
2) "chatroom"
3) "Hi"
此时我们已经收到了刚刚发布的消息,消息内容为 Hi。
怎么样,是不是很简单?
除了 SUBSCRIBE 和 PUBLISH两个命令外,Redis还为我们提供了一些列的监控命令:
查询消息通道(PUBSUB CHANNELS)
PUBSUB CHANNELS [pattern]
pattern 表示匹配规则,此参数为选填,若不指定匹配规则,则默认查询所有激活状态的消息通道。
激活状态的消息通道:至少存在一个订阅者的消息通道才算是激活状态的消息通道
在发布消息的终端,输入如下命令:
127.0.0.1:6379> pubsub channels
1) "chatroom"
可以看到已经查询出我们刚刚创建的消息通道 chatroom。
查询消息通道订阅者数量(PUBSUB NUMSUB)
PUBSUB NUMSUB [channel...]
channel:消息通道名称,
在发布消息的终端,输入如下命令:
127.0.0.1:6379> pubsub numsub chatroom
1) "chatroom"
2) (integer) 1
数字1表示消息通道 chatroom 的订阅者数量为1个