可用版本
ZRANGEBYLEX 命令可用版本:>= 2.8.9
语法
ZRANGEBYLEX key min max [LIMIT offset count]
参数说明如下:
参数 | 说明 |
---|---|
min | 集合中排序位置较小的成员,必须以 ”[“ 开头,或者以 ”(“ 开头,可使用 ”-“ 代替。 |
max | 集合中排序位置较大的成员,必须以 ”[“ 开头,或者以 ”(“ 开头,可使用 ”+”代替。 |
LIMIT | 返回结果是否分页,指令中包含 LIMIT 后 offset、count 必须输入。 |
offset | 偏移量,返回结果的起始位置。 |
count | 返回结果数量。 |
返回值
指定成员范围的元素列表。
min 与 max 参数详解
学习redis的时候对这两个参数比较模糊,一直以为必须是 [[
|(
]member 的格式。其实非也,这里的lex 指定是按照字典顺序。举个例子,有两个字符串 ab、a,那么 ab> a,按ascii码逐字符比较。
比较逻辑
现在比较规则已经明确了,那么比较的细节又是怎么样的呢?
zadd k1 10 ab 20 a 30 b 40 c
这个集合的内容就为
1) "ab"
2) "10"
3) "a"
4) "20"
5) "b"
6) "30"
7) "c"
8) "40"
如果执行
zrangebylex k1 [1 +
1) "ab"
2) "a"
3) "b"
4) "c"
这个结果肯定很好理解,这些member的字典顺序都大于等于"1",小于等于+
。
那么如果是
zrangebylex k1 [ab +
1) "ab"
2) "a"
3) "b"
4) "c"
这个结果可能会出乎你的意料吧
再看
zrangebylex k1 (ab +
1) "b"
2) "c"
这下只剩下两个元素,从字典顺序上看 ab > a 的,为什么执行 zrangebylex k1 [ab +
会有四个member。
比较细则:会按照score上升的顺序排序member,也就是从ab
开始,与 min
对比,是否满足,如果不满足这与下一个元素对比,否则开始与max
比较,直到第一个不满足的元素或者遍历完,返回之间的所有元素。
[ab +
: 第一个元素ab
与[ab
进行比较,满足规则。因此 元素ab
再与+
比较,不满足,直到结束也不满足。所以返回从ab
开始的所有元素。(ab +
: 第一个元素ab
与(ab
进行比较,不满足规则,下一个元素a
在于(ab
比较也不满足,下一个b
满足条件,在于+
比较…。所以返回从b
开始的所有元素。