一、前言
关于redis的zrangebylex的使用,官网和各种课程,给的案例很粗糙,难以理解。
本文带你了解以下内容:
1、zrangebylex它是干什么的
2、zrangebylex命令到底是怎么用?
3、sorted_set有哪些不可不知的秘密?
二、zrangebylex详解
1.zrangebylex的作用和注意事项
作用:按字典从低到高排序,取索引范围内的元素(集合内的分值需相同)
127.0.0.1:6379> help zrangebylex
ZRANGEBYLEX key min max [LIMIT offset count]
summary: Return a range of members in a sorted set, by lexicographical range
since: 2.8.9
group: sorted_set
注意事项:
1.分数必须相同! 如果有序集合中的成员分数有不一致的,返回的结果就不准。
2.成员字符串作为二进制数组的字节数进行比较。
3.默认是以ASCII字符集的顺序进行排列。如果成员字符串包含utf-8这类字符集(比如:汉字)的内容,就会影响返回结果,所以建议不要使用。
4.默认情况下, “max” 和 “min” 参数前必须加 “[” 符号作为开头。”[” 符号与成员之间不能有空格, 返回成员结果集会包含参数 “min” 和 “max” 。
5.“max” 和 “min” 参数前可以加 “(” 符号作为开头表示小于, “(” 符号与成员之间不能有空格。返回成员结果集不会包含 “max” 和 “min” 成员。
可以使用 “-” 和 “+” 表示得分最小值和最大值
6.zrangebylex(它的参数是min 在前 max在后)获取顺序相反的指令是zrevrangebylex (它的参是 max 在前 min 在后)。
7.源码中采用C语言中memcmp() 函数, 从字符的第0位到最后一位进行排序,如果前面部分相同,那么较长的字符串比较短的字符串排序靠后。使用场景:分数相同的有序集合中;LEX结尾的指令是要求分数必须相同。
2.zrangebylex的经典案例
1.用 “-” 和 “+” 表示得分最小值和最大值
127.0.0.1:6379> zadd num 100 aa 100 cc 100 bb 100 ff 100 ee 100 gg 添加分值相同的元素
6
127.0.0.1:6379> zrangebylex num - + 获取所有元素
aa
bb
cc
ee
ff
gg
2.limit分页的使用
语法: zrangebylex key min max [LIMIT offset count]
min 是起始元素位置,- 代表从第0位开始
max 是终止元素位置,+ 代表到最后一个元素
offset 是指下标索引的起始值,
count 是指,从下标索引offset的位置开始(包含offset所对应的元素),向后取几个元素