Redis订阅发布模型比较简单,结构以下:redis
消息通道(channel)做为消息中转站,它不关心消息的发布者(publisher)是谁,也不关心订阅者(subscriber)有没有成功的消费掉消息。publisher负责发送消息,subscriber负责接收消息。shell
Redis订阅发布核心的两个命令就是: SUBSCRIBE 和 PUBLISH。服务器
顾名思义,SUBSCRIBE 就是订阅消息,PUBLISH 就是发布消息。ui
Tips:订阅消息会阻塞链接,一旦开启订阅就不能执行其余的命令(订阅发布命令除外)。code
SUBSCRIBE channel [channel...]
channel 表示消息通道。消息通道能够是一个,也能够是多个,多个消息通道之间用空格隔开。一个消息通道同时能够被多个客户端订阅,消息通道对于客户端来讲是共享的,非独享。图片
打开终端,链接到Redis服务器:ip
weis-MacBook-Pro:~ weihan$ redis-cli 127.0.0.1:6379>
接着输入以下命令,订阅消息通道 chatroom :it
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
键退出订阅状态。class
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 [pattern]
pattern 表示匹配规则,此参数为选填,若不指定匹配规则,则默认查询全部激活状态的消息通道。
激活状态的消息通道:至少存在一个订阅者的消息通道才算是激活状态的消息通道
在发布消息的终端,输入以下命令:
127.0.0.1:6379> pubsub channels 1) "chatroom"
能够看到已经查询出咱们刚刚建立的消息通道 chatroom。
PUBSUB NUMSUB [channel...]
channel:消息通道名称,
在发布消息的终端,输入以下命令:
127.0.0.1:6379> pubsub numsub chatroom 1) "chatroom" 2) (integer) 1
数字1表示消息通道 chatroom 的订阅者数量为1个