Search 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>

我试图在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)