redis - Redis XRANGE:ERR 指定为流命令参数的流 ID 无效
问题描述
我正在尝试使用XRANGE
. 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。
对于以前的版本,推荐的方法是让客户端代码:
- 调用第一个 XRANGE/XREVRANGE 后,取最后一个 ID
- 解析时间戳和序列的最后一个 ID(均为 64 位整数)
- 如果执行 XRANGE,请尝试增加序列。对于 XREVRANGE 减少它。
- 如果序列上溢/下溢,对时间戳执行相同的算术运算并初始化序列(XREVRANGE 为 MAXINT,XREVRANGE 为 0)
- 处理“0-0”和“MAXINT-MAXJNT”情况
- 在下一次调用查询中使用新 ID 并重复
推荐阅读
- r - 用垂直线和正确的图例绘制两个密度
- android - 错误:任务“:app:processDebugGoogleServices”执行失败。> 找不到与包名称 'com.xx.xxx.xxxx' 匹配的客户端
- android - 在 kSoap2 中使用 TLS1.2 客户端证书
- vba - 如何在excel中的一行中自动查找或复制新插入的值到另一个工作表中的两个合并单元格?
- c - 从文本文件中读取一行并在结构中放置由空格分隔的数据
- python - Python Pandas 库获取下拉列并合并重复项
- java - Exoplayer ui分屏并添加双击前进/后退圆形效果
- java - 仅使用 @Component 和 @Autowired 使用 SpringJUnit4ClassRunner 进行单元测试
- php - Mysql SELECT WHERE $VAR IN $VAR,$VAR,$VAR
- java - 如何使用 getExternalStorageDirectory() 从内部存储加载多首歌曲