21.8 STORE选项的实现
在默认情况下,SORT命令只向客户端返回排序结果,而不保存排序结果:
redis> SADD students "peter" "jack" "tom"
(integer) 3
redis> SORT students ALPHA
1) "jack"
2) "peter"
3) "tom"
但是,通过使用STORE选项,我们可以将排序结果保存在指定的键里面,并在有需要时重用这个排序结果:
redis> SORT students ALPHA STORE sorted_students
(integer) 3
redis> LRANGE sorted_students 0-1
1) "jack"
2) "peter"
3) "tom"
服务器执行SORT students ALPHA STORE sorted_students命令的详细步骤如下:
1)创建一个redisSortObject结构数组,数组的长度等于students集合的大小。
2)遍历数组,将各个数组项的obj指针分别指向students集合的各个元素。
3)根据obj指针所指向的集合元素,对数组进行字符串排序,排序后的数组如图21-19所示:
·被排序到数组索引0位置的是"jack"元素。
·被排序到数组索引1位置的是"peter"元素。
·被排序到数组索引2位置的是"tom"元素。

图21-19 排序之后的数组
4)检查sorted_students键是否存在,如果存在的话,那么删除该键。
5)设置sorted_students为空白的列表键。
6)遍历数组,将排序后的三个元素"jack"、"peter"和"tom"依次推入sorted_students列表的末尾,相当于执行命令RPUSH sorted_students"jack"、"peter"、"tom"。
7)遍历数组,向客户端返回"jack"、"peter"、"tom"三个元素。
SORT命令在执行其他带有STORE选项的排序操作时,执行的步骤也和这里给出的步骤类似。