Stream 与消息队列进阶
约 486 字大约 2 分钟
布欧-Lewyon
2026-05-15
Stream 是 Redis 5.0 引入的消息队列数据类型,支持消费者组、ACK 确认、消息持久化。
基础操作
# XADD:添加消息
# * 表示自动生成消息 ID(时间戳-序号)
XADD mystream * sensor temp:25.5 humidity:60
# "1700000000000-0"
# 指定 ID
XADD mystream 1700000001000-0 sensor temp:26.0
# 读取消息
# XRANGE:按 ID 范围读取
XRANGE mystream - + # 全部消息
XRANGE mystream 1700000000000-0 + COUNT 2 # 取 2 条
# XREAD:阻塞读取新消息
XREAD COUNT 2 BLOCK 5000 STREAMS mystream 0消费者组
# XGROUP:创建消费者组
# 从头消费:$
# 从开始消费:0
XGROUP CREATE mystream mygroup 0
# 添加消费者并读取消息
XREADGROUP GROUP mygroup consumer-1 COUNT 1 STREAMS mystream >
# 查看未确认消息
XPENDING mystream mygroup
# 确认消息(ACK)
XACK mystream mygroup 1700000000000-0
# 查看消费者组信息
XINFO GROUPS mystream
XINFO CONSUMERS mystream mygroup消费者组流程
消息 ID 结构
1700000000000-0
^^^^^^^^^^^^ ^^
时间戳(毫秒) 序号- 基于毫秒时间戳 + 自增序号,天然有序。
- 可用于范围查询(按时间段消费)。
消息队列对比
| 特性 | List | Pub/Sub | Stream |
|---|---|---|---|
| 消息持久化 | ✅ | ❌ | ✅ |
| 消费者组 | ❌ | ❌ | ✅ |
| ACK 确认 | ❌ | ❌ | ✅ |
| 消息回溯 | ❌ | ❌ | ✅ |
| 阻塞读取 | ✅ | ✅ | ✅ |
新项目做消息队列直接选 Stream,List 和 Pub/Sub 各有限制。
小结
| 命令 | 用途 |
|---|---|
XADD | 添加消息 |
XREAD | 读取消息 |
XRANGE | 按 ID 范围获取 |
XREADGROUP | 消费者组消费 |
XACK | 确认消息 |
XPENDING | 查看未确认 |
XGROUP | 管理消费者组 |
XINFO | 查看组/消费者信息 |
- Stream 是生产级消息队列,支持消费者组、ACK、持久化。
- 消息 ID 基于时间戳 + 序号,天然有序。
- List 队列适合简单场景,Stream 适合正式生产。
上一节:Hash 与对象缓存 下一节:Bitmap 与 HyperLogLog
