通过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命令的排序结果。
















