Redis精通系列——Stream,2024我的Java路要怎么走

millisecondsTime指的是Redis节点服务器的本地时间,如果存在当前的毫秒时间戳比以前已经存在的数据的时间戳小的话(本地时间钟后跳),那么系统将会采用以前相同的毫秒创建新的ID。

sequenceNumber指的是序列号,在相同的millisecondsTime毫秒下,序列号从0开始递增,序列号是64位长度,理论上在统一毫秒内生成的数据量无法到达这个级别,因此不用担心sequenceNumber会不够用。

客户端显示传入规则

Redis对于ID有强制要求,格式必须是**-**,最小ID为0-1,并且后续ID不能小于前一个ID

2.4 消息内容

Stream的消息内容,也就是图中的Message Content它的结构类似Hash结构,以key-value的形式存在。

3、Stream指令


3.1 指令汇总

Stream的指令根据可以分为两类,分别是消息队列相关指令,消费组相关指令。

消息队列相关指令:

| 指令名称 | 指令作用 |

| — | — |

| XADD | 添加消息到队列末尾 |

| XTRIM | 限制Stream的长度,如果已经超长会进行截取 |

| XDEL | 删除消息 |

| XLEN | 获取Stream中的消息长度 |

| XRANGE | 获取消息列表(可以指定范围),忽略删除的消息 |

| XREVRANGE | 和XRANGE相比区别在于反向获取,ID从大到小 |

| XREAD | 获取消息(阻塞/非阻塞),返回大于指定ID的消息 |

消费组相关指令:

| 指令名称 | 指令作用 |

| — | — |

| XGROUP CREATE | 创建消费者组 |

| XREADGROUP GROUP | 读取消费者组中的消息 |

| XACK | ack消息,消息被标记为“已处理” |

| XGROUP SETID | 设置消费者组最后递送消息的ID |

| XGROUP DELCONSUMER | 删除消费者组 |

| XPENDING | 打印待处理消息的详细信息 |

| XCLAIM | 转移消息的归属权(长期未被处理/无法处理的消息,转交给其他消费者组进行处理) |

| XINFO | 打印Stream\Consumer\Group的详细信息 |

| XINFO GROUPS | 打印消费者组的详细信息 |

| XINFO STREAM | 打印Stream的详细信息 |

3.2 XADD

XADD 用于向Stream 队列中添加消息,如果指定的Stream 队列不存在,则该命令执行时会新建一个Stream 队列。

XADD的指令语法:

XADD key [NOMKSTREAM] [MAXLEN|MINID [=|~] threshold [LIMIT count]] *|ID field value [field value …]

如下通过XADD展示了定义ID的两种方式,具体可以看2.3。

  • 25
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java Redis StreamRedis 5.0版本中新增的一种数据结构,它是一个高性能、持久化的消息队列,可以用于实现消息的发布和订阅。Java Redis Stream可以看作是一个有序的消息队列,每个消息都有一个唯一的ID,可以根据ID进行消息的查找、删除和确认。在Java Redis Stream中,消息以键值对的形式存储,可以存储任意类型的数据。Java Redis Stream还支持多个消费者组,每个消费者组可以独立消费消息,避免消息重复消费。Java Redis Stream的引入使得Redis在消息队列领域更具竞争力,同时也为开发者提供了一种高效、可靠的消息处理方式。 以下是Java Redis Stream的一些基本操作: 1.连接Redis服务器 ```java Jedis jedis = new Jedis("localhost", 6379); ``` 2.发布消息 ```java String key = "mystream"; String message = "Hello, Redis Stream!"; String id = jedis.xadd(key, null, ImmutableMap.of("message", message)); System.out.println("Message ID: " + id); ``` 3.消费消息 ```java String groupname = "mygroup"; String consumername = "myconsumer"; String key = "mystream"; String lastseen = "0"; jedis.xgroupCreate(key, groupname, lastseen, true); List<StreamEntry> entries = jedis.xreadGroup(groupname, consumername, 1, 0, false, new AbstractMap.SimpleEntry<>(key, lastseen)); for (StreamEntry entry : entries) { System.out.println("Message ID: " + entry.getID() + ", Message: " + entry.getFields().get("message")); jedis.xack(key, groupname, entry.getID()); } ``` 4.删除消息 ```java String key = "mystream"; String id = "1234567890-0"; jedis.xdel(key, id); ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值