zoukankan      html  css  js  c++  java
  • 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命令订阅的频道,反之亦然。

  • 相关阅读:
    每周进度及工作量统计——2016.10.06-2016.10.13
    SCRUM站立会议模拟
    java词频统计——web版支持
    每周进度及工作量统计——2016.9.22--2016.9.29
    简易四则运算生成程序——第一次改进后的单元测试
    java词频统计——改进后的单元测试
    第一次通读《构建之法》阅读笔记
    centOS6.5网络配置
    webpack安装
    CommonJS和AMD/CMD
  • 原文地址:https://www.cnblogs.com/SysoCjs/p/10332821.html
Copyright © 2011-2022 走看看