Search Redis词典范围搜索结果不一致
我试图在Redis上进行词典范围搜索,但基于我对该功能工作原理的理解,结果不一致。使用Search Redis词典范围搜索结果不一致,search,redis,sortedset,Search,Redis,Sortedset,我试图在Redis上进行词典范围搜索,但基于我对该功能工作原理的理解,结果不一致。使用ZRANGECOUNT、ZRANGEBYLEX和ZREMRANGEBYLEX时,结果类似 工作查询 这是一个仅使用ZRANGE的包含3个元素的集合示例 redis> ZRANGE myset 0 -1 0 00000000022xm26hax001 1 00000000022xm26hax002 2 00000000022xm26hax003 我还可以按字典顺序获取所有元素 redis>
ZRANGECOUNT
、ZRANGEBYLEX
和ZREMRANGEBYLEX
时,结果类似
工作查询
这是一个仅使用ZRANGE
的包含3个元素的集合示例
redis> ZRANGE myset 0 -1
0 00000000022xm26hax001
1 00000000022xm26hax002
2 00000000022xm26hax003
我还可以按字典顺序获取所有元素
redis> ZRANGEBYLEX myset - +
0 00000000022xm26hax001
1 00000000022xm26hax002
2 00000000022xm26hax003
通过省略最后3个字符来进行范围搜索也可以按预期工作
redis> ZRANGEBYLEX myset [00000000022xm26hax [00000000022xm26hax\xff
0 00000000022xm26hax001
1 00000000022xm26hax002
2 00000000022xm26hax003
调整范围参数,我也可以只选择前两个元素
redis> ZRANGEBYLEX myset [00000000022xm26hax001 [00000000022xm26hax002\xff
0 00000000022xm26hax001
1 00000000022xm26hax002
短期启动似乎是可以接受的:
redis> ZRANGEBYLEX myset [00000000022x [00000000022xm26hax001\xff
0 00000000022xm26hax001
问题查询
但是,当我尝试使用较短版本的字符串进行选择时,我遇到了一些问题-这些字符串都返回0结果,而我希望它们返回3
ZRANGEBYLEX myset [00000000022xm26h [00000000022xm26h\xff
ZRANGEBYLEX myset [00000000022x [00000000022x\xff
但是,只加回“m”会使它再次返回所有三个元素
redis> ZRANGEBYLEX myset [00000000022xm [00000000022xm\xff
0 00000000022xm26hax001
1 00000000022xm26hax002
2 00000000022xm26hax003
有人能解释这种行为吗?对于我的示例数据集,返回以“00000000022x”开头的所有元素的正确方法是什么
为什么
ZRANGEBYLEX-myset[00000000022x[00000000022x\xff
不返回任何结果,但ZRANGEBYLEX-myset[00000000022xm[00000000022xm\xff
返回所有结果-只需添加“m”似乎就能使其按预期工作?如果您希望Redis解析字符串中的转义码(如示例中的\xff
),需要将字符串用引号括起来
换句话说,这将把\xff
视为字节255:
127.0.0.1:6379> ZRANGEBYLEX myset [00000000022xm26hax001 "[00000000022xm26ha\xff"
1) "00000000022xm26hax001"
2) "00000000022xm26hax002"
3) "00000000022xm26hax003"
而这将\xff
视为四个字节(92、120、102、102):
这就解释了你令人困惑的结果。这个问题的解决方案最终无法由我发布的问题来决定。为了清楚起见,我遗漏了每个排序集条目的分数,这意味着一个过期时间戳。不幸的是,文档中说: 当排序集中的所有元素都以相同的分数插入时,为了强制按字典顺序排列,此命令返回排序集中关键点处的所有元素,其值介于min和max之间 我的条目没有相同的分数,因此它们没有按字典顺序排序
127.0.0.1:6379> ZRANGEBYLEX myset [00000000022xm26hax001 [00000000022xm26ha\xff
(empty list or set)