文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

Redis 数据类型Streams详解

2024-10-23 22:09

关注

Redis Streams 是 Redis 5.0 引入的一种新的数据类型,它提供了一种强大的日志结构化数据存储方式。Streams 类型非常适合用于构建消息队列、事件日志以及其他需要持久化和高效处理时间序列数据的应用场景。

1 基本特性

2 主要操作命令 

2.1 XADD key ID field value [field value ...]

向指定的流中添加一条新消息,ID 可以是 *(表示自动生成)或指定的时间戳和序列号。

127.0.0.1:6379> xadd mystream * sensor_id 123 temmperature 22.5
"1729306027171-0"

返回的结构可以分为两部分:

2.2 XREAD [COUNT count] [BLOCK milliseconds] STREAMS key [key ...] ID [ID ...]

COUNT 指定返回的最大条目数。BLOCK 指定在没有新消息时阻塞的时间(毫秒)。STREAMS 指定要读取的 Stream 和起始 ID。

127.0.0.1:6379> xread count 2 streams mystream 0-0
1) 1) "mystream"
   2) 1) 1) "1729306027171-0"
         2) 1) "sensor_id"
            2) "123"
            3) "temmperature"
            4) "22.5"

2.3 XRANGE key start end [COUNT count]

127.0.0.1:6379> xrange mystream - +
1) 1) "1729306027171-0"
   2) 1) "sensor_id"
      2) "123"
      3) "temmperature"
      4) "22.5"

2.4 XREVRANGE key end start [COUNT count]

返回指定 ID 范围内的条目,但按逆序排列。

127.0.0.1:6379> xadd mystream * sensor_id 234 temmperature 23.5
"1729329067777-0"
127.0.0.1:6379> xadd mystream * sensor_id 345
"1729329079135-0"
127.0.0.1:6379> xrevrange mystream + - count 2
1) 1) "1729329079135-0"
   2) 1) "sensor_id"
      2) "345"
2) 1) "1729329067777-0"
   2) 1) "sensor_id"
      2) "234"
      3) "temmperature"
      4) "23.5"

2.5 XGROUP CREATE key groupname id-or-$ [MKSTREAM]

127.0.0.1:6379> xgroup create mystream mygroup 0
OK

2.6 XREADGROUP GROUP group consumer [COUNT count] [BLOCK milliseconds] [NOACK] STREAMS key [key ...] ID [ID ...]

127.0.0.1:6379> xreadgroup group mygroup consumer1 count 2 streams mystream >
1) 1) "mystream"
   2) 1) 1) "1729306027171-0"
         2) 1) "sensor_id"
            2) "123"
            3) "temmperature"
            4) "22.5"
      2) 1) "1729329067777-0"
         2) 1) "sensor_id"
            2) "234"
            3) "temmperature"
            4) "23.5"

2.7 XACK key group ID [ID ...]

确认已处理的消息。XACK 命令用于确认消费者组中的消息已经被成功处理。当你使用 XACK 命令时,Redis 会将指定的消息从“待处理”状态转换为“已确认”状态,并从消费者的待处理列表中移除。

127.0.0.1:6379> xack mystream mygroup 1729329067777-0
(integer) 1
127.0.0.1:6379> xack mystream mygroup 1729329079135-0
(integer) 0

当 XACK 命令成功确认一条消息时,返回值为 1,表示该消息已经被确认并且从待处理列表中移除。例如,如果消息 1729329067777-0 是由 consumer1 处理的,并且现在调用 XACK 确认它,那么这条消息将不再出现在 consumer1 的待处理列表中。

2.8 XPENDING key group [start end count] [IDLE idle]

查看待处理的消息。

127.0.0.1:6379> xpending mystream mygroup
1) (integer) 1
2) "1729306027171-0"
3) "1729306027171-0"
4) 1) 1) "consumer1"
      2) "1"
127.0.0.1:6379> xack mystream mygroup 1729306027171-0
(integer) 1
127.0.0.1:6379> xpending mystream mygroup
1) (integer) 0
2) (nil)
3) (nil)
4) (nil)

2.9 XCLAIM key group consumer min-idle-time ID [ID ...] [IDLE idle] [TIME time] [RETries count] [FORCE]

用于将一个或多个消息从一个消费者转移到另一个消费者。这个命令通常用于处理消息超时或重新分配消息的情况。XCLAIM 允许你手动将消息从一个消费者的待处理列表移动到另一个消费者的待处理列表。

127.0.0.1:6379> xreadgroup group mygroup consumer1 count 2 streams mystream >
1) 1) "mystream"
   2) 1) 1) "1729329079135-0"
         2) 1) "sensor_id"
            2) "345"
127.0.0.1:6379> xclaim mystream mygroup consumer2 10000 1729329079135-0
1) 1) "1729329079135-0"
   2) 1) "sensor_id"
      2) "345"

2.10 XINFO 

获取 Stream 或消费者组的信息。

127.0.0.1:6379> xinfo stream mystream
 1) "length"
 2) (integer) 3
 3) "radix-tree-keys"
 4) (integer) 1
 5) "radix-tree-nodes"
 6) (integer) 2
 7) "groups"
 8) (integer) 1
 9) "last-generated-id"
10) "1729329079135-0"
11) "first-entry"
12) 1) "1729306027171-0"
    2) 1) "sensor_id"
       2) "123"
       3) "temmperature"
       4) "22.5"
13) "last-entry"
14) 1) "1729329079135-0"
    2) 1) "sensor_id"
       2) "345"
127.0.0.1:6379> xinfo groups mystream
1) 1) "name"
   2) "mygroup"
   3) "consumers"
   4) (integer) 2
   5) "pending"
   6) (integer) 1
   7) "last-delivered-id"
   8) "1729329079135-0"
127.0.0.1:6379> xinfo consumers mystream mygroup
1) 1) "name"
   2) "consumer1"
   3) "pending"
   4) (integer) 0
   5) "idle"
   6) (integer) 255317
2) 1) "name"
   2) "consumer2"
   3) "pending"
   4) (integer) 1
   5) "idle"
   6) (integer) 191940

XINFO STREAM mystream

length:

流中的消息总数:3 条。

radix-tree-keys:

用于存储流数据的 radix tree 中的键的数量:1 个。

radix-tree-nodes:

用于存储流数据的 radix tree 中的节点数量:2 个。

groups:

与该流关联的消费者组数量:1 个。

last-generated-id:

流中最后生成的消息 ID:1729329079135-0

first-entry:

流中的第一条消息: 消息 ID: 1729306027171-0消息内容: sensor_id123temmperature22.5

last-entry:

流中的最后一条消息: 消息 ID: 1729329079135-0消息内容: sensor_id345

XINFO GROUPS mystream

name:

消费者组的名称:mygroup

consumers:

该组中的消费者数量:2 个。

pending:

该组中待处理的消息数量:1 条。

last-delivered-id:

该组中最后一个被交付的消息 ID:1729329079135-0

XINFO CONSUMERS mystream mygroup

第一个消费者:

第一个消费者:

第二个消费者:

2.11  XDEL key ID [ID ...]

从 Stream 中删除一个或多个条目。

127.0.0.1:6379> xdel mystream 1729306027171-0
(integer) 1
127.0.0.1:6379> xrange mystrea - +
(empty list or set)
127.0.0.1:6379> xrange mystream - +
1) 1) "1729329067777-0"
   2) 1) "sensor_id"
      2) "234"
      3) "temmperature"
      4) "23.5"
2) 1) "1729329079135-0"
   2) 1) "sensor_id"
      2) "345"

2.12 XTRIM key MAXLEN [~] len

修剪 Stream,保留最多 len 个条目,~ 表示近似长度。

127.0.0.1:6379> xrange mystream - +
1) 1) "1729329067777-0"
   2) 1) "sensor_id"
      2) "234"
      3) "temmperature"
      4) "23.5"
2) 1) "1729329079135-0"
   2) 1) "sensor_id"
      2) "345"
127.0.0.1:6379> xtrim mystream maxlen 1
(integer) 1
127.0.0.1:6379> xrange mystream - +
1) 1) "1729329079135-0"
   2) 1) "sensor_id"
      2) "345"

3 使用场景

更多命令请参考:Commands | Docs 

到此这篇关于Redis 数据类型Streams的文章就介绍到这了,更多相关Redis 数据类型Streams内容请搜索编程网(www.lsjlt.com)以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程客栈(www.lsjlt.com)!

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     801人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     348人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     311人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     432人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     220人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-数据库
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯