Redis Stream
Redis Stream(Redis 流)是 Redis 5.0 引入的数据结构,主要用于 消息队列、事件存储和数据流处理。它结合了 列表(List)、发布订阅(Pub/Sub)和有序集合(Sorted Set) 的特性,适用于 高吞吐的日志、事件驱动架构和实时数据处理。
Redis Stream 的特点
- 持久化日志存储:Stream 内部数据按追加(Append-Only)方式存储,支持历史消息查询。
- 消息队列:支持生产者-消费者模式,多个消费者可以消费同一条消息。
- 消费者组(Consumer Group):支持多个消费者分配和消费消息,类似于 Kafka 的 Consumer Group。
- 高效的 ID 机制:每条消息都有一个唯一的 Stream ID(形如
1678875112345-0
),按时间顺序存储。 - 阻塞和非阻塞读取:支持
XREAD
(读取)、XREADGROUP
(消费者组读取)以及XADD
(添加)。 - 自动删除策略:可以手动或自动删除过期数据,防止 Stream 过大占用内存。
基本命令
命令 | 作用 |
---|---|
XADD mystream * field1 value1 field2 value2 | 添加数据到 Stream |
XRANGE mystream - + | 查询 Stream 内的所有数据 |
XREAD COUNT 2 STREAMS mystream 0 | 读取 Stream 数据 |
XGROUP CREATE mystream mygroup $ MKSTREAM | 创建消费者组 |
XREADGROUP GROUP mygroup consumer1 COUNT 1 STREAMS mystream > | 从消费者组读取消息 |
XACK mystream mygroup 1684211234567-0 | 确认消息已消费 |
XDEL mystream 1684211234567-0 | 删除特定消息 |
XLEN mystream | 获取 Stream 长度 |
典型应用场景
- 日志和事件存储:如 用户行为日志、订单流水 记录。
- 消息队列:适用于 实时任务调度,提供类似 Kafka 的能力,但更轻量。
- 流式数据处理:配合 Redis Gears 进行 数据分析、实时告警。
- 微服务通信:用于异步任务处理、去中心化事件驱动架构。
Redis Stream 提供了强大的 数据流处理能力,结合 Kafka、RabbitMQ 等消息队列的优点,适用于高性能分布式系统。