redis streams

50 阅读3分钟

Redis Streams 是 Redis 5.0 引入的一种新的数据结构,用于处理消息队列和日志数据。Streams 提供了一种高效、持久化的方式来存储和处理消息,支持多种消费模型和消息传递模式。以下是对 Redis Streams 的详细介绍,包括其基本概念、命令和使用场景。

基本概念

  1. Stream:一个有序的日志(log)数据结构,可以存储多个消息。
  2. Message:每条消息是一个键值对的集合,称为字段-值对(field-value pairs)。
  3. Consumer Group:一组消费者,可以共同消费一个 Stream 中的消息。
  4. Consumer:属于某个 Consumer Group 的消费者,负责处理消息。
  5. Pending Entries List (PEL):记录每个 Consumer Group 中尚未确认的消息。

基本命令

1. 创建和添加消息

  • XADD:向 Stream 中添加一条消息。
    XADD mystream MAXLEN 100 * sensor-id 1234 temperature 19.8
    
    • mystream:Stream 的名称。
    • MAXLEN 100:限制 Stream 的最大长度为100条消息。
    • *:自动生成消息ID。
    • sensor-id 1234 temperature 19.8:消息的内容,键值对形式。

2. 读取消息

  • XREAD:读取一个或多个 Stream 中的消息。

    XREAD COUNT 2 BLOCK 5000 STREAMS mystream 0
    
    • COUNT 2:最多读取2条消息。
    • BLOCK 5000:如果当前没有消息,等待5000毫秒。
    • STREAMS mystream 0:从 mystream 中读取ID大于0的消息。
  • XREADGROUP:从 Consumer Group 中读取消息。

    XREADGROUP GROUP mygroup myconsumer COUNT 2 STREAMS mystream >
    
    • GROUP mygroup myconsumer:指定 Consumer Group 和 Consumer。
    • COUNT 2:最多读取2条消息。
    • STREAMS mystream >:从 mystream 中读取未被其他消费者处理的消息。

3. 确认消息

  • XACK:确认消息已被处理。
    XACK mystream mygroup 1526922289062-0
    
    • mystream:Stream 的名称。
    • mygroup:Consumer Group 的名称。
    • 1526922289062-0:消息ID。

4. 删除消息

  • XDEL:删除一条或多条消息。
    XDEL mystream 1526922289062-0
    
    • mystream:Stream 的名称。
    • 1526922289062-0:消息ID。

5. 查看待处理消息

  • XPENDING:查看 Consumer Group 中待处理的消息。
    XPENDING mystream mygroup
    
    • mystream:Stream 的名称。
    • mygroup:Consumer Group 的名称。

使用场景

  1. 消息队列:Redis Streams 可以用作消息队列,支持发布/订阅模式和竞争消费模式。
  2. 日志聚合:用于收集和处理日志数据,支持高效的数据存储和查询。
  3. 实时数据分析:用于实时处理和分析数据流,支持高吞吐量和低延迟。
  4. 事件溯源:用于记录和回溯系统事件,支持事件的持久化和审计。

示例

创建和添加消息

XADD mystream * sensor-id 1234 temperature 19.8
XADD mystream * sensor-id 1235 temperature 20.1

读取消息

XREAD COUNT 2 STREAMS mystream 0

创建 Consumer Group 并读取消息

XGROUP CREATE mystream mygroup 0 MKSTREAM
XREADGROUP GROUP mygroup myconsumer COUNT 2 STREAMS mystream >

确认消息

XACK mystream mygroup 1526922289062-0

查看待处理消息

XPENDING mystream mygroup