博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Redis——排序
阅读量:6193 次
发布时间:2019-06-21

本文共 1742 字,大约阅读时间需要 5 分钟。

hot3.png

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

转载于:https://my.oschina.net/lvhuizhenblog/blog/682920

你可能感兴趣的文章
RTP协议分析
查看>>
前后端分离了,然后呢?(转)
查看>>
自定义控件:滑动开关按钮
查看>>
js修改后没反应-看看是不是取的缓存
查看>>
【iCore3 双核心板_ uC/OS-III】例程十一:任务消息队列
查看>>
C#的delegate简单练习
查看>>
【301】IDL与C#混合编程
查看>>
分治法应用之一——Strassen矩阵乘法(转)
查看>>
linux-diff命令
查看>>
必须关注的25位知名JavaScript开发者
查看>>
linq直接执行sql语句
查看>>
POJ - 1170 Shopping Offers (五维DP)
查看>>
【Linux学习】Linux的文件权限(一)
查看>>
python的内存管理机制
查看>>
一个基于 EasyUI 的前台架构(3)封装操作Tabs的JS代码
查看>>
《深入理解Android 卷III》第四章 深入理解WindowManagerService
查看>>
hdu 5093 二分匹配
查看>>
a erlang crawler
查看>>
hdu 3586 Information Disturbing(树形dp + 二分)
查看>>
无聊,只发两张图……
查看>>