详解redis(14):数据结构Stream

一、为什么 Redis 一定要出 Stream?

发布订阅(Pub/Sub)的问题

优点

实时

简单

缺陷

不持久化

客户端离线 → 消息直接丢

无法回溯历史消息

本质原因:

Pub/Sub 是"广播事件",不是"存储消息"

List 实现消息队列的问题

优点

FIFO

可阻塞

问题一:消息一旦消费就没了

无法重复消费

消费失败,消息直接丢

问题二:没有 ACK 机制

消费者 RPOP 后宕机

消息已经被删除

问题三:ID 需要自己维护

分布式环境下很麻烦

本质原因:

List 是"容器",不是"消息日志"

二、Redis Stream 的设计目标

Redis 官方目标很明确:

做一个"真正的消息队列 / 消息日志系统"

Stream 要解决的问题:

能力 是否支持
消息持久化
全局唯一 ID
消息不丢
消费确认(ACK)
多消费者
消费组
消息回溯

三、Stream 是什么?

Redis Stream 是一个"只追加的消息日志(Append-Only Log)"

Stream 的数据模型

消息 ID 是什么?

<毫秒时间戳>-<序列号>

特点:

全局有序

天然递增

分布式安全

Redis 自动生成(*

为什么 ID 如此重要?

用来 定位消息

用来 断点续消费

用来 回溯历史消息

Stream 如何解决旧方案的问题?

1. 消息持久化

Stream 数据:

存在内存

写 AOF / RDB

Redis 重启 消息仍在

2.支持历史消息读取

可以从头读到尾

离线重连也能补消息

3. 自动生成全局唯一 ID

Redis 保证:

不重复

单调递增

4. ACK 确认机制

只有 ACK 后:

消息才算"已处理"

消费者宕机?

未 ACK 的消息会留在 Pending List

5. 消费组

这是 Stream 最重要的能力

没有消费组(广播)

每个消费者都能读到所有消息

有消费组(负载均衡)

特点:

一条消息只会被一个消费者处理

天然负载均衡

非常适合后台任务、订单处理

Stream vs List vs Pub/Sub

特性 Pub/Sub List Stream
持久化
消息确认
重复消费
消费组
消息回溯
适合生产 勉强
相关推荐
正在走向自律11 分钟前
企业级数据库行标识技术深度解析:OID与ROWID的双轨架构实战
数据库·oracle·oid·rowid
PD我是你的真爱粉15 分钟前
向量数据库原理与检索算法入门:ANN、HNSW、LSH、PQ 与相似度计算
数据库·人工智能·算法
不爱吃大饼16 分钟前
redis主从节点
数据库·redis·bootstrap
Wyawsl19 分钟前
Python操作MySQL数据库
数据库·python·mysql
水彩橘子22 分钟前
PostgreSQL Streaming Replication 主从
数据库·postgresql
亚马逊云开发者40 分钟前
Amazon Aurora PostgreSQL 快速配置实战:两次点击秒级创建无服务器数据库,告别 VPC 子网安全组配置噩梦
数据库·postgresql·serverless
晴天sir43 分钟前
Redis 在业务中的几种典型用法
java·数据库·redis
jnrjian1 小时前
B树index 的维护 Oracle
数据库·oracle
正在走向自律1 小时前
企业级数据库存储运维实战:表空间自动创建与存储架构深度优化
运维·数据库·架构·表空间
jnrjian1 小时前
Oracle 并发 锁
数据库