Redis——发布/订阅

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

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

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

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

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


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

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

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

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

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

        有时候逐个订阅指定频道并不是很方便,如果要订阅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命令订阅的频道,反之亦然。

posted @ 2019-01-29 10:13  KamShing  阅读(193)  评论(0编辑  收藏  举报