Redis - ZRANGEBYLEX返回空集

时间:2018-01-10 16:03:15

标签: redis

我有一个以redis存储的集合,如下所示:

127.0.0.1:6379> zrange my_set 0 -1
1) "ABC20180108131627044829:XYZ20180108131627044857"
2) "ABC20180108131627044829:XYZ20180108131627044858"
3) "ABC20180108131627044829:XYZ20180108131627044859"
4) "ABC20180108131627044830:XYZ20180108131627044830"
5) "ABC20180108131627044830:XYZ20180108131627044831"

使用

将它们添加到集合中
ZADD my_set 0 ABC20180108131627044829:XYZ20180108131627044857
ZADD my_set 0 ABC20180108131627044829:XYZ20180108131627044858
ZADD my_set 0 ABC20180108131627044829:XYZ20180108131627044859
ZADD my_set 0 ABC20180108131627044830:XYZ20180108131627044830
ZADD my_set 0 ABC20180108131627044830:XYZ20180108131627044831

我以为我可以使用以下内容取回包含 ABC20180108131627044829 的所有项目,但我在这里得到一个空列表。

127.0.0.1:6379> ZRANGEBYLEX my_set - [ABC20180108131627044829
(empty list or set)

2 个答案:

答案 0 :(得分:1)

您无法在ZRANGEBYLEX命令的限制中指定部分值,您必须输入整个字符串,但您可以利用词典规则。

这样可行:

ZRANGEBYLEX my_set [ABC20180108131627044829 [B

如您所见,区间的开头似乎是部分关键字,但实际上并非如此:例如,ABCDABC之后出现在这些规则中,B出现在ABC之后{1}},所以你必须调整你的标准以适应这一点。

另外,提醒一下:ZRANGEBYLEX仅适用于具有相同排序集分数的成员!

修改

ZRANGEBYLEX my_set - (ABC20180108131627044830 

应该适用于您的示例

答案 1 :(得分:0)

您正在寻找自动填充行为。这是一个ZRANGEBYLEX查询,它只为您提供以字符串开头的元素:

ZRANGEBYLEX my_set [STRING [STRING\xff

以你的例子为例:

ZRANGEBYLEX my_set [ABC20180108131627044829 [ABC20180108131627044829\xff

1) "ABC20180108131627044829:XYZ20180108131627044857"
2) "ABC20180108131627044829:XYZ20180108131627044858"
3) "ABC20180108131627044829:XYZ20180108131627044859"

注意,所有分数必须相等。