Redis之发布与订阅底层实现

时间:2024-03-25 16:13:14

一,储备知识

      1,发布与订阅功能的作用
            一个客户单可以订阅一个或多个频道,成为这些频道的订阅者,每当有其他客户端向该频道发送消息,那么该频道的所有订阅者都会收到这个消息;
      2,发布与订阅所涉及的命令
            a,publish:由于向某个频道发送消息;
            b,subscribe[səbˈskraɪb] :用于客户单订阅某个频道;
            c,psubscribe:用于客户端订阅某个模式;pattern:模式

一,频道的订阅与退订

      1,频道的订阅
            每当客户端执行subscribe命令,订阅某个频道的时候,那么服务器就会将客户端的信息存入到redisServer类中的pubsub_channel字典属性中;该属性的键是频道,值为一个链表,用来记录订阅了该链表的所有客户端;如下所示:
Redis之发布与订阅底层实现
      2,频道的退订
            频道退订命令使用unsubscribe命令,该命令的作用就是使得客户端退订该频道,那么服务器就会将对应的客户端信息从链表中删除;如下所示,虚线框为退订客户端
Redis之发布与订阅底层实现

二,模式的订阅与退订

      1,模式的订阅
            当客户单执行了psubscribe命令的时,服务器就会在redisServer结构的pubsub_patterns属性中创建对应的pubsub_pattern类来保存客户端的信息以及订阅的模式;如下所示:
Redis之发布与订阅底层实现
      2,模式的退订
            当客户端执行了punsubscribe命令之后,那么服务器就会将对应的信息移除,如下所示:
Redis之发布与订阅底层实现

三,发送消息

      1,服务器的做法
            a,将消息发送给所有频道的订阅者;
            b,将消息发送给模式的订阅者,前提是该模式与频道相匹配

四,查看订阅信息

      1,pubsub channels命令
            a,作用:用于返回服务器当前被订阅的频道
            b,举例:前者是pubsub channels命令,后者是pubsub channel pattern
Redis之发布与订阅底层实现
      2,pubsub numsub
            a,作用:用于返回频道订阅者的数量
            b,举例:
Redis之发布与订阅底层实现
      3,pubsub numpat
            a,作用:用于返回服务器当前被订阅模式的数量
            b,举例:
Redis之发布与订阅底层实现