美文网首页
Redis5数据类型6-Stream

Redis5数据类型6-Stream

作者: 轻轻敲醒沉睡的心灵 | 来源:发表于2022-03-18 09:32 被阅读0次

    1. Stream 类型介绍

    Stream是Redis5.0 引入的一个新的数据类型,官方把它定义为:以更抽象的方式模拟日志的数据结构。Redis的streams主要是一个append only的数据结构,至少在概念上它是一种在内存中表示的抽象数据类型,只不过它们实现了更强大的操作,以克服日志文件本身的限制。
    如果你了解MQ,那么可以把streams当做MQ。如果你还了解kafka,那么甚至可以把streams当做kafka。
    streams数据结构本身非常简单,但是streams依然是Redis到目前为止最复杂的类型,其原因是实现的一些额外的功能:一系列的阻塞操作允许消费者等待生产者加入到streams的新数据。另外还有一个称为Consumer Groups的概念,这个概念最先由kafka提出,Redis有一个类似实现,和kafka的Consumer Groups的目的是一样的:允许一组客户端协调消费相同的信息流!

    2. Stream指令

    2.1 增加对象或向已存在对象追加元素

    xadd key ID field string [field string ...]
    ID包含两部分:时间戳(毫秒)-sequence(同一毫秒的数列号)组成。用*可以代替默认值,也可以自己指定

    127.0.0.1:6379> xadd s1 * 宿命荒芜 至少我有风骨
    1647422390375-0
    127.0.0.1:6379> xadd s2 0-1 岁月掩埋 休想把我沉浮
    0-1
    127.0.0.1:6379>
    

    2.2 查询元素个数

    xlen key

    127.0.0.1:6379> xadd s1 * 一炉造化荒天 默
    1647422691708-0
    127.0.0.1:6379> xlen s1
    2
    127.0.0.1:6379>
    

    2.3 删除ID

    xdel key ID [ID ...]

    127.0.0.1:6379> xadd s2 1-1 ab cd
    1-1
    127.0.0.1:6379> xadd s2 1-2 ef gh
    1-2
    127.0.0.1:6379> xlen s2
    3
    127.0.0.1:6379> xdel s2 1-1
    1
    127.0.0.1:6379> xlen s2
    2
    127.0.0.1:6379>
    

    2.4 返回给定ID范围的数据

    xrange key start end
    特殊ID:- 最小ID + 最大ID

    127.0.0.1:6379> xrange s1 - +
    1647422390375-0
    宿命荒芜
    至少我有风骨
    1647422691708-0
    一炉造化荒天
    默
    127.0.0.1:6379> xrange s2 0-1 1-2
    0-1
    岁月掩埋
    休想把我沉浮
    1-2
    ef
    gh
    127.0.0.1:6379>
    

    2.5 从一个或多个stream对象中读取数据

    xread [COUNT count] [BLOCK milliseconds] STREAMS key [key ...] ID [ID ...]
    count 是指定ID后的几条
    BLOCK 0:永久阻塞;$:表示获取最新的数据

    127.0.0.1:6379> xadd s2 2-1 kl mn
    2-1
    127.0.0.1:6379> xread streams s2 0-1
    s2
    1-2
    ef
    gh
    2-1
    kl
    mn
    127.0.0.1:6379> xread count 1 streams s2 0-1
    s2
    1-2
    ef
    gh
    127.0.0.1:6379> xread block 0 streams s2 $
    

    被阻塞在那了,等待新数据进来

    2.6 xgroup 和 xreadgroup

    • 创建一个消费组
      xgroup [CREATE key groupname id] 将key中指定ID后面的元素加入到消费组中
    • 从消费组中读取数据
      xreadgroup GROUP group consumer [COUNT count] [BLOCK milliseconds] STREAMS key [key ...] ID [ID ...]
      需要写出消费组名字、添加消费者名字
      > 表示读取所有
      被一个消费者读取了就不能被其他消费者读取了
    127.0.0.1:6379> xgroup create s1 test1 1647422390375-0 # 将指定ID之后(不包括指定ID)的数据加入到消费组
    OK
    127.0.0.1:6379> xreadgroup group test1 cons1 streams s1 >
    s1
    1647422691708-0
    一炉造化荒天
    默
    1647424384713-0
    一身风骨
    擎天破
    127.0.0.1:6379> xreadgroup group test1 cons1 streams s1 1647422390375-0
    s1
    1647422691708-0
    一炉造化荒天
    默
    1647424384713-0
    一身风骨
    擎天破
    127.0.0.1:6379>
    

    相关文章

      网友评论

          本文标题:Redis5数据类型6-Stream

          本文链接:https://www.haomeiwen.com/subject/ulbpdrtx.html