首页/数据/数据库速查/消息方案对比(List / Pub/Sub / Streams)
本包目录(495 条)
MySQL 基础与连接36 条SQL 语法52 条用户与权限21 条备份与恢复56 条主从复制与高可用53 条性能与调优57 条Redis 命令96 条
Redis 运维与场景124 条

消息方案对比(List / Pub/Sub / Streams)

三类方案的可靠性差别巨大:List 简单竞争消费但无 ACK、Pub/Sub 广播不持久、Streams 有消费组/PEL/回溯;按「消息能不能丢」选型。

数据库速查数据更新于 2026-10-12

对比

方案持久化ACK/重试投递模型
List有(元素在内存)无竞争消费(一条被一个消费者取走)
Pub/Sub无无广播(在线订阅者都收到)
Streams有有(PEL + CLAIM)消费组分片 + 可回溯

三种写法

三种写法
LPUSH jobs job1 && BRPOP jobs 30        # List
PUBLISH notify "deploy done"            # Pub/Sub
XADD orders * id 1                      # Streams
XREADGROUP GROUP g1 c1 COUNT 10 STREAMS orders >
简单任务List 够用(能接受丢消息)
实时通知Pub/Sub(丢了没关系)
可靠消费Streams(要 ACK/重试/积压监控)
混合Pub/Sub 通知 + Streams 兜底
List 想要「不丢」要用 RPOPLPUSH/ BRPOPLPUSH 做可靠队列(处理完再 LREM 备份队列),复杂度接近自己造 Streams。

易错点

  • BRPOP 弹出即消失:消费者处理失败消息就丢了,必须配备份队列
  • 把 Pub/Sub 当队列:订阅端不在线期间消息全丢

数据来源与参考

  • Redis 官方文档: Streams
  • Redis 官方文档: Pub/Sub

相关工具

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌