全书目录

第九篇:Redis 完全指南 —— 软件城市实时调度中心宇宙

第十二章:Pub/Sub —— 城市广播电台,快,但不保留历史

1 分钟 426 字 第 215 / 962 个阅读单元

Redis Pub/Sub 很像城市广播系统:

  • 发布方往频道发消息
  • 订阅方只要在线就能收到
  • 彼此不需要知道对方是谁
bash
SUBSCRIBE channel:orders
PUBLISH channel:orders "order-9001-created"

Redis 官方文档对 Pub/Sub 最关键的一句话是:

text
at-most-once delivery

也就是:

  • 发出去的消息,最多送达一次
  • 如果订阅方掉线、出错、来不及处理,这条消息就丢了
  • Pub/Sub 不负责持久保存消息历史

所以它适合:

  • 实时广播
  • 实时通知
  • 聊天室转发
  • 跨实例实时事件提醒

但它不适合:

  • 必须重放历史
  • 必须确认消费
  • 必须失败重试
  • 必须保证消息至少送达一次
#Pub/Sub 还有几个重要细节

Redis 官方文档说明:

  • 订阅方按发布顺序收到消息
  • Pub/Sub 与数据库编号无关,不同 db 也能互相听见
  • 如果要环境隔离,应该自己给频道加前缀
  • 可以用模式订阅 PSUBSCRIBE news.*
  • 同时命中频道订阅和模式订阅时,客户端可能收到两份消息
  • Redis 7.0 开始支持 Sharded Pub/Sub,用于在 Cluster 模式下减少全局广播压力
text
Pub/Sub = 广播电台
优点:快、松耦合、简单
缺点:不存历史、不补发、不帮你兜底