• Redis发布订阅与原理


    Redis发布与订阅

    Redis的发布与订阅功能通过PUBLISH、SUBSCRIBE/UNSUBSCRIBE、PSUBSCRIBE/PUNSUBSCRIBE等命令组成。

    • 通过SUBSCRIBE,客户端可以订阅一个或多个频道,成为这些频道的订阅者,并可以通过UBSUBSCRIBE退订。
    • 通过PSUBSCRIBE,客户端可以订阅一个或多个模式,成为这些频道的订阅者,并可以通过PUBSUBSCRIBE退订。
    • 每当有其他客户端通过PUBLISH向这些频道发送消息时,频道的所有订阅者都将收到这条消息。

    注:模式就是使用了通配符的频道名,比如news.*。

    通配符:

    • ?:一个占位符
    • *:0至多个占位符
    • ?*:一个及以上个占位符

    1、订阅与退订的原理

    I. 频道的订阅与退订

    1. Redis服务器维护了一个名为pubsub_channels字典,字典的键是被订阅的频道值是订阅了这些频道的客户端链表

    2. 当一个客户端订阅(SUBSCRIBE)频道时,服务器首先到字典中查找是否有这个频道。

      • 如果,则将该客户端放至链表的末尾。

      • 如果没有,则先创建该频道的键,然后将客户端插入链表。

    3. 当一个客户端退订(UNSUBSCRIBE)频道时,服务器到字典中找到频道的键并删除该客户端的信息。如果删除后链表为空,则将键一并删除。

    II. 模式的订阅与退订

    1. Redis服务器维护了一个名为pubsub_pattern链表,每个链表节点存储了客户端及其订阅的模式
    2. 当客户端订阅(PSUBSCRIBE)模式时,服务器创建一个存储客户端及其订阅模式的链表节点,并将其添加至链表的末尾。
    3. 当客户端退订(PUNSUBSCRIBE)模式时,服务器在链表中寻找对应的节点并将其删除。

    2、发布的原理

    I. 发布给频道订阅者

    Redis服务器根据频道名到字典中查找对应的订阅客户端链表,然后将信息发送给所有的订阅者。

    II. 发布给模式订阅者

    Redis服务器遍历pubsub_pattern链表,并将消息发送给订阅了对应模式的客户端。

    3、其它命令

    • PUBSUB CHANNELS [pattern]:查看当前服务器中被订阅的频道,如果提供了pattern字段,则查看当前服务器中符合pattern模式的频道。
    • PUBSUB NUMSUB channel [channel1 …]:返回当前服务器中对应频道的订阅者数量。
    • PUBSUB NUMPAT:返回当前服务器中订阅了模式的订阅者数量。
  • 相关阅读:
    Bootstrap 标签
    Java设计模式之单例设计模式
    cJSON解析
    图神经网络(GNN)最新顶会论文汇总【附源码】
    LeetCode·71.简化路径·栈模拟
    你真的懂TSP吗
    uni-app--》基于小程序开发的电商平台项目实战(六)
    基于STM32的智能小车方案设计
    字体的基础知识:中文字体的特征
    linux提权
  • 原文地址:https://blog.csdn.net/Wyf_Fj/article/details/126555707