概述
- 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 适合轻量级消息队列解决方案,但需要注意其设计定位和高可用性问题。适用于数据量可控、业务模型简单的场景。