Redis ZSet中的zrangebylex规则详解

可用版本

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 比较,直到第一个不满足的元素或者遍历完,返回之间的所有元素。

  1. [ab +: 第一个元素 ab[ab 进行比较,满足规则。因此 元素ab 再与 + 比较,不满足,直到结束也不满足。所以返回从ab开始的所有元素。
  2. (ab +: 第一个元素 ab(ab 进行比较,不满足规则,下一个元素a 在于 (ab 比较也不满足,下一个b 满足条件,在于+比较…。所以返回从b开始的所有元素。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值