美文网首页
17.发布订阅

17.发布订阅

作者: 蜗牛ICU | 来源:发表于2019-07-19 10:03 被阅读0次

1. 简介:

   redis 的发布订阅功能由 PUBLISH,SUBSCRIBE,PSUBSCRIBE 等命令组成。
   通过 SUBSCRIBE 命令,客户端可以订阅一个或多个频道,成为这些频道的订阅者,当其他客户端向被订阅者发送消息时,频道的所有订阅者都会收到信息。

   三个客户 a,b,c 端执行了下面的命令:
 
    SUBSCRIBE "news.it"

   另一个客户端发布了一个消息:
    PUBLISH "news.it" "hello"

  a,b,c 都会受到消息

2. 频道的订阅和退订:

   当一个客户端执行 SUBSCRIBE 命令订阅某个或者某些频道时候,这个客户端和被订阅的频道之间就建立了一种订阅关系。
   redis 将所有的频道订阅关系保存在服务器状态的 pubsub_channels 字典里面,这个字典的键是某个被订阅的频道,而这个键的值是一个链表,链表里面记录里所有的订阅这个频道的客户端:

   struct redisServer{
      // ...
        dict *pubsub_channels ; // 保存所有频道的订阅关系
      // ...
   }

3. 订阅频道:

   每当客户端 SUBSCRIBE 命令订阅某个或者某些频道时,服务器都会将客户端与被订阅的频道在 pubsub_channels 字典中进行关联。
   根据频道是否已经有其他订阅者,关联的操作分为两种情况:
     1. 已经有其他的订阅者, 直接在对应的键的值的位置追加一条客户端的信息。
     2. 没有其他的订阅者,先创建一个频道,然后将客户端追加在值的位置。

4. 退订频道:

   UNSUBSCRIBE 命令的行为时当一个客户端退订某个或者某些频道的时候,服务器将从 pusub_channels 中解除客户端与被退订频道之间的关系。
   频道的退订分为下面的情况:
   程序会根据被退订的频道名称在 pubsub_channels 字典中找到对应的频道,然后从订阅者链中删除客户端信息,如果删除客户端信息之后,没有了其他的订阅者,程序会将 pubsub_channels 字典中对应的键删除。

5. 查看订阅信息:

   PUSSUB 命令是 redis 2.8 新增加的命令,查看订阅了那些频道和被那些客户订阅了。

PUBSUB  CHANNELS [pattern]  // 查看有那些频道

PUBSUB  UNMSUB [多个频道名称用空格分隔]  // 查看一个频道有多少个订阅者

PUBSUB  NUMPAT                         // 查看订阅了几个频道

相关文章

  • 17.发布订阅

    1. 简介: redis 的发布订阅功能由 PUBLISH,SUBSCRIBE,PSUBSCRIBE 等命令组成...

  • 发布-订阅

    参考 https://www.cnblogs.com/shenh/p/10497244.html 模式一:fan...

  • 发布订阅

    https://developer.mozilla.org/zh-CN/docs/Web/API/EventTar...

  • 发布订阅

    期望的数据类型{event: [fn1, fn2],}

  • 发布订阅

    //观察者模式和订阅发布模式的不同点在于,订阅发布模式 订阅者和发布者是解耦的,他们的关联是通过第三方来的//例子:

  • 发布订阅

  • 发布订阅

    最开始是听一位大佬讲 最开始的发布订阅库 是受dom 二级 事件的启发 后来经过封装 形成的一个库 那么 什么是...

  • 发布订阅模式(观察者模式)

    发布订阅模式(观察者模式) 发布订阅也叫观察者模式 发布 && 订阅 使用

  • 设计模式之发布订阅模式(1) 一文搞懂发布订阅模式

    目录 发布/订阅者模式的优点 实现发布/订阅者模式需要考虑的点 何时应使用发布/订阅者模式 发布/订阅者模式与观察...

  • JS-简单实现发布订阅模式

    发布订阅模式主要涉及三个对象:发布者、订阅者、主题对象。 发布-订阅模式 定义  发布-订阅模式又称观察者模式,它...

网友评论

      本文标题:17.发布订阅

      本文链接:https://www.haomeiwen.com/subject/noxjlctx.html