如果 Pub/Sub 是广播电台,那 Streams 更像事件流水总线。
Redis 官方文档对 Streams 的定义非常清楚:
Stream 像一个 append-only log,但又比普通追加日志更强,支持随机访问、消费组等能力。
最基础写法:
XADD stream:orders * orderId 9001 status created
XRANGE stream:orders - +消费者读取:
XREAD COUNT 10 STREAMS stream:orders 0消费组:
XGROUP CREATE stream:orders order-workers 0
XREADGROUP GROUP order-workers worker-1 COUNT 10 STREAMS stream:orders >
XACK stream:orders order-workers 1719999999999-0#Streams 和 Pub/Sub 的核心差别
Pub/Sub
├── 像广播
├── 只管当前在线订阅者
└── 消息过去就过去了
Streams
├── 像事件流水账
├── 消息会留在流里
├── 可以回放
├── 可以消费组分工
└── 可以 ack这就是为什么 Redis 官方文档明确说:
- Pub/Sub 是 at-most-once
- Streams 支持更强的处理语义
#Redis 8.2 在线程流上的变化
官方 Redis 8.2 文档特别提到:
XDELEXXACKDELXADD/XTRIM的增强
它们的目标就是:让 Stream 和多个 consumer group 的协作更细、更稳。
所以到了今天,Streams 已经不是“Redis 顺手做了个队列”,而是一条越来越像真正事件流系统的能力线。