使用sort命令可以对给定的链表、集合、有序集合中的元素进行排序。redis默认将要排序的元素看作数字,封装成双精度的浮点数进行比较、排序
redis内部使用快速排序算法进行排序;
sort实现:服务器执行sort members命令的详细步骤:
创建一个和members长度相同的数组,该数组的每个项都是一个redisSortObject结构;
遍历数组,将各个数组项的obj指针分别指向members列表的各个项,构成obj指针和列表项之间的一对一关系;
遍历数组,将各个obj指针所指向的列表项转成一个double浮点数(或根据选项转成字符串),并将其保存在相应数组项的score属性中;
根据score属性,对数组进行排序;
遍历数组,将各个obj指针所指向的列表向作为排序结果返回给客户端;
一般用法:1
2
3
4
5
6
7
8
9
10
11127.0.0.1:6379> lrange list1 0 -1
1) "3"
2) "6"
3) "1"
4) "9"
127.0.0.1:6379> sort list1
1) "1"
2) "3"
3) "6"
4) "9"
1)使用alpha选项,对字符串进行排序:
默认情况下,redis是按照数字进行排序的,通过alpha选项可以按照字符串排序。1
2
3
4
5127.0.0.1:6379> sort list2 alpha
1) "a"
2) "g"
3) "y"
4) "z"
2)使用asc、desc选项,进行升序、降序排序:
默认情况下, redis是按照升序排的,可以指定desc选项进行降序排列。1
2
3
4
5127.0.0.1:6379> sort list1 desc
1) "9"
2) "6"
3) "3"
4) "1"
使用limit分页显示排序结果:
用法:sort key limit offset countoffset:跳过已经排序元素数量;
count:要返回已排序元素数量;1
2
3