当前位置: 首页 > news >正文

(01)Redis 的订阅发布Pub/Sub

本文主要是用通俗易懂的话解释Redis Pub/Sub。

我发现公司的老项目 把这个订阅发布机制当成MQ来用了,这样想来也真是降本增效啊。习惯了使用火箭MQ的我,又得从头研究下订阅发布消息通讯。
我们暂且按照MQ的生产者 和消费者对应Redis中的 发布 和订阅。我记得之前面试过程中也有问过让你自己实现一个MQ 怎么实现。这种面试题考查的就是你对底层原理是否清晰。

Redis 是一个“中转站”:
订阅者把自己挂在频道上,Redis 帮你记住谁订阅了什么;
发布者只需要往频道发消息,Redis 就把这条消息“群发”给所有挂在这个频道上的订阅者。

Redis 用了什么数据结构实现?

Redis 的底层是用 字典(哈希表)+ 列表 实现的:

  • 一个大字典 channel -> list of clients
  • 每个键是一个频道名,值是订阅该频道的客户端列表
  • 每当有客户端订阅、取消订阅,Redis 就增删这个列表
  • 发布消息时,Redis 遍历这个列表,直接写到客户端连接中

举个例子🌰zz:

你可以把 Redis Pub/Sub 类比成一个微信群(频道)

  • 加群 = 订阅频道(SUBSCRIBE
  • 群发消息 = 发布(PUBLISH
  • 在线就能看到消息,退群/没加群就收不到
  • 群消息不保存历史记录,只能看直播

Redis “广播站”,它的工作大致流程如下:

订阅时:登记在广播站

  • 每个频道(channel)就像一个广播频率,比如“新闻频道”。
  • 当你用 SUBSCRIBE news 命令订阅时,Redis 把你这个客户端登记在 news 频道的订阅列表里
  • Redis 在内存里维护了一个结构,类似这样:
{"news": [客户端1, 客户端2],"sports": [客户端3]
}

发布时:广播给订阅者

  • 当另一个客户端用 PUBLISH news "今天有大新闻" 发送消息时:
    • Redis 会查一下:“谁订阅了 news 频道?”
    • 然后把 "今天有大新闻" 这条消息推送给所有订阅了这个频道的客户端(像群发短信一样)。

推送过程:不存消息,谁在线谁能收

  • Redis 是“推送+广播”机制,不是“存储+拉取”。
  • 如果你在发布那一刻不在线,或者没订阅这个频道,你就永远收不到那条消息了。

相关文章:

  • 2025年高级Java后端面试题:最新技术体系深度解析
  • Promtail+Loki+Grafana监控日志
  • 数据结构每日一题day13(链表)★★★★★
  • PostgreSQL数据库版本升级
  • Blender插件 三维人物角色动作自动绑定 Auto-Rig Pro V3.68.44 + Quick Rig V1.26.16
  • 非线性现实:绘制复杂系统的图景及AI推理
  • Springboot使用jwt实现登录认证
  • DeepSeek提示词技巧
  • Android Studio Profiler
  • SICAR 标准功能块 FB3352 (MODE)工作模式功能块
  • Nacos 3.0 正式发布:MCP Registry、安全零信任、链接更多生态
  • 无锡哲讯科技:引领企业数字化转型的SAP实施专家
  • C# 导入EXCEL 报错外部表不是预期的格式错误指南方案
  • 前缀和 后缀和 --- 寻找数组的中心下标
  • Idea 如何配合 grep console过滤并分析文件
  • g4f api报错:ImportError: cannot import name ‘model_validator‘ from ‘pydantic‘
  • SELinux 从理论到实践:深入解析与实战指南
  • 存储过程补充——定义条件、处理程序及游标使用
  • shell编程基础(第x篇:子进程知识点汇总)
  • MySQL日志详解
  • 屠呦呦当选美国国家科学院外籍院士
  • 南京航空航天大学启动扁平化改革:管理岗规模控制在20%,不再统一设科级机构
  • 出行注意防晒补水,上海五一假期以多云天气为主最高33℃
  • “杭州六小龙”的招聘迷局
  • 人社部:就业政策储备充足,将会根据形势变化及时推出
  • 利物浦提前四轮英超夺冠,顶级联赛冠军数追平曼联