Redis Pub/Sub 很像城市广播系统:
- 发布方往频道发消息
- 订阅方只要在线就能收到
- 彼此不需要知道对方是谁
SUBSCRIBE channel:orders
PUBLISH channel:orders "order-9001-created"Redis 官方文档对 Pub/Sub 最关键的一句话是:
at-most-once delivery也就是:
- 发出去的消息,最多送达一次
- 如果订阅方掉线、出错、来不及处理,这条消息就丢了
- Pub/Sub 不负责持久保存消息历史
所以它适合:
- 实时广播
- 实时通知
- 聊天室转发
- 跨实例实时事件提醒
但它不适合:
- 必须重放历史
- 必须确认消费
- 必须失败重试
- 必须保证消息至少送达一次
#Pub/Sub 还有几个重要细节
Redis 官方文档说明:
- 订阅方按发布顺序收到消息
- Pub/Sub 与数据库编号无关,不同 db 也能互相听见
- 如果要环境隔离,应该自己给频道加前缀
- 可以用模式订阅
PSUBSCRIBE news.* - 同时命中频道订阅和模式订阅时,客户端可能收到两份消息
- Redis 7.0 开始支持 Sharded Pub/Sub,用于在 Cluster 模式下减少全局广播压力
Pub/Sub = 广播电台
优点:快、松耦合、简单
缺点:不存历史、不补发、不帮你兜底