Redis XRANGE: ERR作为流命令参数指定的流ID无效



我正在尝试使用XRANGE迭代Redis流。Redis文档指出,我需要前缀(到我的最后一个时间戳是排他性的。引用文档:

为了继续对接下来的两个项进行迭代,我必须选择返回的最后一个ID,即1519073279157-0,并为其添加前缀()。得到的独占范围间隔,在本例中是(1519073279157-0),现在可以用作下一个XRANGE调用的新开始参数:

但是如果我这样做,我得到一个错误,下面是两个命令,一个没有排他前缀,一个产生一个错误:

redis:6379> XRANGE unittest 1612384862718-0 +
1) 1) "1612384862718-0"
2) 1) "x"
2) "42"
2) 1) "1612384862780-0"
2) 1) "x"
2) "43"
3) 1) "1612384862888-0"
2) 1) "x"
2) "44"
redis:6379> XRANGE unittest (1612384862718-0 +
(error) ERR Invalid stream ID specified as stream command argument

在Redis文档中的例子对我来说是一样的:

> XRANGE mystream (1519073279157-0 + COUNT 2
1) 1) 1519073280281-0
2) 1) "foo"
2) "value_3"
2) 1) 1519073281432-0
2) 1) "foo"
2) "value_4"

redis_version:6.0.6

在Redis 6.2中添加了对独占/打开范围查询间隔的支持,参见https://github.com/redis/redis/pull/8072。

对于以前的版本,推荐的方法是让客户端代码:

  1. 调用第一个XRANGE/XREVRANGE后,取最后一个ID
  2. 解析最后一个ID的时间戳和序列(都是64位整数)
  3. 如果使用XRANGE,尝试增加序列。对于XREVRANGE,递减它。
  4. 如果序列溢出/下溢,对时间戳执行相同的算术并初始化序列(XREVRANGE为MAXINT, XRANGE为0)
  5. 处理"0-0"one_answers";MAXINT-MAXJNT"情况下
  6. 在下一个查询调用中使用新的ID并重复

最新更新