redis数据类型-流Stream

redis数据类型-流Stream

文档

  1. redis单机安装
  2. redis常用的五种数据类型
  3. redis数据类型-位图bitmap
  4. redis数据类型-基数统计HyperLogLog
  5. redis数据类型-地理空间GEO

官方文档

  1. 官网操作命令指南页面:https://redis.io/docs/latest/commands/?name=get&group=string
  2. XPENDING
  3. XACK

流:Stream

说明
  1. redis的Stream数据类型用来实现类似于MQ的功能
基本命令
  1. xadd stream1 * k1 hello k2 world k3 hi*表示系统生成消息ID,消息ID单调递增。返回消息ID,返回信息:1745339499702-0。键对应的数据类型是streamtype stream1返回stream

  2. xadd stream1 1745339499702-1 k1 hello k2 world k3 hi:可以手动指定消息ID,要保证大于上一个消息ID

  3. xrange stream1 - +:按照消息ID从小到大的顺序,返回键的所有消息内容。-表示最小的消息ID,+表示最大的消息ID

    返回信息:

    1) 1) "1745339499702-0"
       2) 1) "k1"
          2) "hello"
          3) "k2"
          4) "world"
          5) "k3"
          6) "hi"
    2) 1) "1745339499702-1"
       2) 1) "k1"
          2) "hello"
          3) "k2"
          4) "world"
          5) "k3"
          6) "hi"
    3) 1) "1745340321032-0"
       2) 1) "k1"
          2) "hello"
          3) "k2"
          4) "world"
          5) "k3"
          6) "hi"
          7) "k4"
          8) "nihao"
    
  4. xrange stream1 - + count 1:返回键的消息内容,限制返回1条

  5. xrevrange stream1 + -:按照消息ID从大到小的顺序,返回键的所有消息内容。

  6. xdel stream1 1745339499702-1:删除键的消息中,指定消息ID的消息

  7. xlen stream1:键对应的消息的个数

  8. xtrim stream1 maxlen 2:保留消息ID最大的2条消息

  9. xtrim stream1 minid 1745418708380-1:删除小于指定消息ID的消息,不包含指定的ID,该ID也可以不对应消息

  10. xinfo stream stream1:返回键对应值的具体信息

返回信息:

 1) "length"
 2) (integer) 50
 3) "radix-tree-keys"
 4) (integer) 1
 5) "radix-tree-nodes"
 6) (integer) 2
 7) "last-generated-id"
 8) "1745430158960-0"
 9) "max-deleted-entry-id"
10) "1745339499702-1"
11) "entries-added"
12) (integer) 61
13) "recorded-first-entry-id"
14) "1745418708589-0"
15) "groups"
16) (integer) 5
17) "first-entry"
18) 1) "1745418708589-0"
    2) 1) "k1"
       2) "hello"
       3) "k2"
       4) "world"
       5) "k3"
       6) "hi"
       7) "k4"
       8) "nihao"
19) "last-entry"
20) 1) "1745430158960-0"
    2) 1) "k1"
       2) "hello"
       3) "k2"
       4) "world"
       5) "k3"
       6) "hi"
读取消息命令
  1. xread streams stream1 $:读取比当前最大消息ID大的消息。非阻塞,所以返回(nil)
  2. xread count 2 streams stream1 0:从最小的消息ID开始,读取2条消息。非阻塞
  3. xread count 2 streams stream1 1745418708589-0:从大于指定消息ID开始,读取2条消息,不包含指定的ID。非阻塞
  4. xread block 0 streams stream1 $:读取比当前最大消息ID大的消息。阻塞,有新消息进来才会返回,block 0表示不超时,block 10表示超时时间是10毫秒,到达超时时间仍无新消息,将返回(nil)
消费者组
  1. xgroup create stream1 group5 1745422015204-0:创建消费者组group5,消费范围是指定消息ID之后的消息,不包含指定的ID
  2. xgroup create stream1 group3 0:创建消费者组group3,0表示从第一个消息开始消费
  3. xgroup create stream1 group3 $:创建消费者组group3,$表示从比当前最大消息ID大的消息开始消费
消费者
  1. xreadgroup group group3 consumer1 streams stream1 >:消费者consumer1从消费者组group3中进行消费,从未消费的消息开始,一直消费到最新消息。同消费者组的消费者,不能重复消费其他消费者已消费的消息
  2. xreadgroup group group5 consumer2 count 2 streams stream1 >:消费者consumer2从消费者组group5中进行消费,从未消费的消息开始,1次消费2条消息。同消费者组的消费者,不能重复消费其他消费者已消费的消息
  3. xreadgroup group group5 consumer1 streams stream1 1745422409572-0:重复消费指定消息ID之后的,自己已消费的消息,不包含指定的ID。
未确认的消息
  1. xpending stream1 group5:返回挂起消息总数,挂起消息中最小和最大的ID,各个消费者的挂起消息的数量

    返回信息:

    1) (integer) 16
    2) "1745422045997-0"
    3) "1745422707104-0"
    4) 1) 1) "consumer1"
          2) "8"
       2) 1) "consumer2"
          2) "7"
       3) 1) "consumer3"
          2) "1"
    
  2. xpending stream1 group5 - + 2 consumer1:返回消息的ID、消费者、此消息传递以来所经过的毫秒数、发送此消息的次数

    返回信息:

    1) 1) "1745422045997-0"
       2) "consumer1"
       3) (integer) 857944
       4) (integer) 10
    2) 1) "1745422408253-0"
       2) "consumer1"
       3) (integer) 857944
       4) (integer) 10
    
确认消息
  1. xack stream1 group5 1745422045997-0:在消费者组中,确认处理指定消息。逻辑上,在未确认消息列表中删除指定消息

应用场景

  1. 主流的消息队列是kafka、rabbitMQ、rocketMQ等,redis的stream实际生产中使用较少

你可能感兴趣的:(redis,redis,java,数据库)