Redis——发布/订阅

        上一篇说起到使用任务队列来实现进程间的消息传递(https://blog.csdn.net/weixin_39400271/article/details/86670850),Redis还提供了一组命令来实现进程间的消息传递,那就是“发布/订阅”模式。.net

        “发布/订阅”模式原理:模式中包含两种角色,一种是发布者,另外一种是订阅者。订阅者能够订阅若干个频道,而发布者能够向指向的频道发送信息,全部订阅了此频道的订阅者都会收到此消息。blog

打开一个cmd窗口,做为一个客户端A,输入publish命令,对指定频道进行发送邮件:队列

        上面的命令中,向频道channel.1发送了“hello”消息,返回0,表示收到此消息的订阅者数量为0,由于如今尚未客户端对channel.1进行订阅。值得注意的是,发出去的消息不会被持久化,也就是说,若是后面有新的订阅者订阅了channel.1频道,那么,以前发出去的消息,新的订阅者是不会收到的。进程

在客户端A,输入subscribe命令对频道进行订阅:get

        subscribe命令能够同时订阅多个频道,上图同时订阅了channel.1,channel.2和channel.3频道,能够看到,当使用了subscribe命令时,立刻进入等待状态。此时,再开一个cmd窗口,做为客户端B,输入发布命令:cmd

        这里须要介绍一个右边图的返回信息。右图有两个绿色框,上方的表示subscribe信息,下方表示message信息,其实还有一个就是unsubscribe信息。class

1)subscribe:表示订阅成功的反馈信息,第二个值是所订阅的频道名称,第三个值是当前客户端(即客户端A)订阅的频道数量,因此channel.2和channel.3那里依次是2和3;原理

2)message:表示接收到的信息,刚才客户端B向channel.2发送的“world”消息,客户端A立刻响应。第二个值表示产生消息的频道名称,第三个值是消息的内容;channel

3)unsubscribe:表示取消订阅频道。im

        有时候逐个订阅指定频道并非很方便,若是要订阅channel.1~channel.100,那么可使用psubscribe命令来指定订阅规则

上图的channel.?*能够匹配channel.1和channel.10,可是不能够匹配channel. 。返回信息中,第一个表示类型,跟“subscribe”同样,第二个信息表示订阅规则,第三个信息表示当前订阅的频道数量。

此时向频道channel.1发送消息:

        上图1号绿色框,向channel.3发布一条消息,返回2,表示有两个客户端收到此消息;2号框是以前开启的客户端的返回信息,在以前已经对channel.3进行订阅;3号绿色框是刚才新打开的客户端,返回信息比2号绿色框多了一条,而多出来的那条信息表示订阅规则,其余三条信息跟前面说的同样,同时与之对应的,第一条信息是“pmessage”,而不是“message”。

        注意:使用punsubscribe命令只能退订经过psubscribe订阅的规则,绝对不影响使用subscribe命令订阅的频道,反之亦然。