Redis Pub/Sub
Redis Pub/Sub 是面向在线订阅者的低延迟广播机制,适合跨实例通知和 wakeup;它采用瞬时投递,不应被当作 durable event log。
#concept
#growing
#backend
#architecture
#redis
[!info] related notes
- 所属 MOC:Messaging & Queues MOC、BodySense Redis 从零到一课程 MOC
- 前置概念:Redis
- 并列概念:Redis Streams
- 关系笔记:消息投递语义
- 对应课程:BodySense Redis 第 9 课
Redis Pub/Sub
一句话定义
Redis Pub/Sub 让 Publisher 把消息广播给当前在线的 Subscriber,适合低延迟 fan-out / wakeup,但普通订阅者离线时不会获得历史消息,因此不具备 durable log 语义。
核心模型
Publisher
→ PUBLISH channel payload
→ Redis
→ online subscribers
Subscriber:
SUBSCRIBE channel
关键语义
- 低延迟在线广播;
- 支持跨进程 / 跨实例 fan-out;
- 普通 Subscriber 离线期间会错过消息;
- 没有 Stream 那样的历史、Pending、ACK、Consumer Group;
- 消息丢失或重复的上层影响必须由架构决定。
适合的模式:Durable Truth + Lossy Wakeup
durable source commit
→ best-effort PUBLISH "changed"
→ subscriber wakes
→ read durable source from last known position
只把 Pub/Sub 当“唤醒信号”,即使通知丢失,也可以通过定时 reconciliation、下一条通知或重连从 durable source 补齐。
BodySense Runtime Event
PostgreSQL COMMIT runtime_event(seq=N)
→ Redis PUBLISH run:<id>
→ SSE API wakes
→ SELECT events WHERE seq > lastSeq
Redis notification 不是事件本身;PostgreSQL runtime_events 与 seq 才是 durable authority。
Commit 顺序
优先:
durable commit
→ best-effort publish
而不是先 publish 再尝试落 durable state。这样 publish 失败只损失即时唤醒,不损失事实。
与 Stream 的核心区别
Pub/Sub
→ online notification
Stream
→ retained entries + consumer progress