Redis Streams
Redis Streams 是带 Entry ID、历史记录、Consumer Group、Pending 与 ACK 的日志型数据结构,适合需要消费进度和重试语义的轻量事件或任务流。
#concept
#growing
#backend
#architecture
#redis
[!info] related notes
- 所属 MOC:Messaging & Queues MOC、BodySense Redis 从零到一课程 MOC
- 前置概念:Redis
- 并列概念:Redis Pub/Sub
- 关系笔记:消息投递语义、异步任务队列
- 对应课程:BodySense Redis 第 10 课
Redis Streams
一句话定义
Redis Streams 是 Redis 的 append-only 日志型数据结构,可保留 Entry ID 与历史,并通过 Consumer Group、Pending Entries、ACK/Claim 支持有消费进度的事件或任务处理。
核心命令
XADD
XREAD / XREADGROUP
XGROUP CREATE
XACK
XPENDING
XCLAIM / XAUTOCLAIM
XTRIM
Consumer Group
Stream
→ Consumer Group
├─ consumer-a
├─ consumer-b
└─ consumer-c
同一 group 中消息可分配给不同 consumer,未 ACK 的消息进入 Pending Entries List。
ACK 不等于 Exactly-once
典型失败:
worker receives message
→ external side effect succeeds
→ worker crashes before XACK
→ message is delivered/reclaimed again
因此上层仍需:
- idempotency;
- duplicate handling;
- retry policy;
- poison message policy;
- side-effect boundary。
Pub/Sub vs Streams
| Pub/Sub | Streams | |
|---|---|---|
| 历史 | 普通订阅者离线即错过 | 可保留 |
| Consumer Group | 无 | 有 |
| Pending / ACK | 无 | 有 |
| 典型用途 | 实时通知 / wakeup | 轻量任务流 / retained events |
BodySense 边界
BodySense 当前 PostgreSQL JobRuntime 已经拥有 durable Job、attempt、idempotency、legal transition、recovery sweep 等能力。因此学习 Streams 不等于应该迁移 Job authority。
更低风险的增量是:
Postgres job commit
→ Redis wakeup / optional stream signal
→ worker wakes
→ Postgres ClaimPending remains authoritative