概述
- Redis Stream 是 Redis 5.0 版本引入的数据结构,用于消息传递。
基础概念
- 结构:消息链表,每个消息有唯一 ID 和内容。
- 命名:每个 Stream 有唯一名称,对应 Redis Key。
- 消费组(ConsumerGroup):
- 可挂载多个消费组,需手动创建。
- 每个组有游标
last_delivered_id
,记录消费进度。
- 消费者(Consumer):
- 消费组内可挂载多个消费者。
- 并行读取消息,更新消费组游标。
- 内部属性
pending_ids
记录未确认消息 ID。
核心命令
- XADD:添加消息到 Stream 末尾。
- 使用
*
让 Redis 自动生成消息 ID。 - 可指定 Stream 长度,如
MAXLEN
。
- 使用
- XLEN:获取 Stream 长度。
- XRANGE:获取消息列表,自动过滤已删除消息。
- XREAD:阻塞/非阻塞方式获取消息。
- 使用
BLOCK
选项实现阻塞读取。
- 使用
- XGROUP CREATE:创建消费者组。
- 支持从头或从尾部开始消费。
- XREADGROUP:消费组内读取消息。
- XACK:消息消费确认,提高可靠性。
- XPENDING:查看未确认消息 ID。
- XTRIM:限制 Stream 长度,修剪消息。
SpringBoot 集成
- 添加依赖
spring-boot-starter-data-redis
。 - 配置 yaml 文件。
- 配置
RedisTemplate
。 - 定义 Stream 监听器。
- 定义并启动
streamcontainer
。 - 发送消息,消费者打印日志。
Redis Stream 适用性分析
- 优点:
- 实现发布订阅模型。
- 消费独立,订阅组间互不影响。
- 支持一对多通信。
- 与 Kafka 类似,有消费者组和偏移量。
- 解决了 Redis List 作为队列时缺乏 Ack 机制的问题。
- 局限性:
- 定位为内存数据库,不适合大量消息堆积。
- 高可用方案可能丢失消息(AOF 和主从复制异步)。
- 适合轻量级消息队列,数据量可控,业务模型简单。
总结
Redis Stream 适合轻量级消息队列解决方案,但需要注意其设计定位和高可用性问题。适用于数据量可控、业务模型简单的场景。
标签:消费,Stream,队列,Redis,消息,ID From: https://blog.csdn.net/modelsetget/article/details/140122965