通过limit选项,可以让SORT命令返回其中一部分已排序的元素。
limit 选项的格式为limit <offset> <count>;
offset 参数表示要跳过的已排序元素数量。
count 参数表示跳过给定数量的已排序元素之后,要返回的已排序元素数量。

typedef struct _redisSortObject {
    //被排序键的值
    robj *obj;

    //权重
    union {
        //排序数字值时使用
        double score;
        //排序带有BY选项的字符串值时使用
        robj *cmpobj;
    } u;
} redisSortObject;

通过使用GET 选项,我们可以让SORT命令在对键进行排序之后,根据被排序的元素,以及GET选项所指定的模式,查找并返回某些键的值。

SET students "jack" "peter" "tom"
 SET peter-name "Peter White"
 SET jack-name "jack Snow"
 SET tom-name "Tom Smith"SORT students ALPHA GET *-name

多个选项的执行顺序
一个SORT命令通常会用到多个选项,而这些选项的执行顺序是有先后之分的。
选项的执行顺序:
如果按照选项来划分的话,一个SORT命令的执行过程可以分为以下四步:
1. 排序:在这一步,命令会使用ALPHA, ASC或DESC,BY这几个选项,对输入键进行排序,并得到一个排序结果集。
2. 限制排序结果集的长度,在这一步,命令会使用LIMIT选项,对排序结果集的长度进行限制,只有LIMIT选项指定的那部分元素会被保留在排序结果集中。
3. 获取外部键:在这一步,命令会使用GET选项,根据排序结果集中的元素,以及GET选项指定的模式查找并获取指定键的值,并用这些值来作为新的排序结果集。
4. 保存排序结果集:在这一步,命令会使用SORT选项,将排序结果集保存到指定的键上面去。
5. 向客户端返回排序结果集:在最后一步,命令遍历排序结果集,并依次向客户端返回排序结果集中的元素。

SORT <key>  ALPHA  DESC BY <by-pattern> LIMIT <offset> <count> GET <get-pattern>
              STORE  <store-key>
 那么命令先执行:
   SORT <key> ALPHA DESC BY <by-pattern>
 接着执行:
   LIMIT <offset> <count>
 然后执行:
   GET <get-pattern>
 之后执行:
   STORE <store_key>


总结:
    * SORT 命令通过将排序键包含的元素载入到数组里面,然后对数组进行排序来完成对键进行排序
    的工作。
    
    * 在默认情况下,SORT命令假设被排序键包含的都是数字值,并且以数字值的方式来进行排序。
    
    * 如果SORT命令使用了ALPHA选项,那么SORT命令假设被排序键包含的都是字符串值,并且以字符
    串的方式进行排序。
    
    * SROT 命令的排序操作由快速排序算法实现。
    * 当SROT 命令使用了BY选项时,命令使用其他键的值作为权重来进行排序操作。
    
    * 当SROT命令使用了LIMIT选项时,命令只保留排序结果集中LIMIT选项指定的元素。
    
    * 当SROT命令使用了GET 选项时,命令会根据排序结果集中的元素,以及GET选项给定的模式,
    查找并返回其他键的值,而不是返回被排序的元素。
    
    * 当SROT命令使用了STORE选项时,命令会将排序结果保存在指定的键里面。
    * 当SROT命令同时使用多个选项时,命令先执行排序操作(可用的选项为ALPHA,ASC或DESC,BY),然后执行LIMIT选项,之后执行GET选项,再之后执行STORE选项,最后才将排序结果集返回给客户端。
    
    * 除了GET选项之外,调整选项的摆放位置不会影响SORT命令的排序结果