21.3 ASC选项和DESC选项的实现

在默认情况下,SORT命令执行升序排序,排序后的结果按值的大小从小到大排列,以下两个命令是完全等价的:



SORT <key>
SORT <key> ASC

相反地,在执行SORT命令时使用DESC选项,可以让命令执行降序排序,让排序后的结果按值的大小从大到小排列:



SORT <key> DESC

以下是两个对numbers列表进行升序排序的例子,第一个命令根据默认设置,对numbers列表进行升序排序,而第二个命令则通过显式地使用ASC选项,对numbers列表进行升序排序,两个命令产生的结果完全一样:



redis> RPUSH numbers 3 1 2
(integer) 3
redis> SORT numbers
1) "1"
2) "2"
3) "3"
redis> SORT numbers ASC
1) "1"
2) "2"
3) "3"

与升序排序相反,以下是一个对numbers列表进行降序排序的例子:



redis> SORT numbers DESC
1) "3"
2) "2"
3) "1"

升序排序和降序排序都由相同的快速排序算法执行,它们之间的不同之处在于:

·在执行升序排序时,排序算法使用的对比函数产生升序对比结果。

·而在执行降序排序时,排序算法所使用的对比函数产生降序对比结果。

因为升序对比和降序对比的结果正好相反,所以它们会产生元素排列方式正好相反的两种排序结果。以numbers列表为例:

·图21-7展示了SORT命令在对numbers列表执行升序排序时所创建的数组。

·图21-8展示了SORT命令在对numbers列表执行降序排序时所创建的数组。

图21-7 执行升序排序的数组

图21-8 执行降序排序的数组

其他SORT <Key> DESC命令的执行步骤也和这里给出的步骤类似。