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