17.发布订阅

2019-07-19  本文已影响0人  蜗牛ICU

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                         // 查看订阅了几个频道
上一篇 下一篇

猜你喜欢

热点阅读