我有一个以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)
答案 0 :(得分:1)
您无法在ZRANGEBYLEX
命令的限制中指定部分值,您必须输入整个字符串,但您可以利用词典规则。
这样可行:
ZRANGEBYLEX my_set [ABC20180108131627044829 [B
如您所见,区间的开头似乎是部分关键字,但实际上并非如此:例如,ABCD
在ABC
之后出现在这些规则中,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"
注意,所有分数必须相等。