博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Redis sort命令详解
阅读量:6842 次
发布时间:2019-06-26

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

  hot3.png

redis的sort命令,可能算得上redis里面最复杂的一个命令了,命令原型如下:

SORT key [BY pattern] [LIMIT offset count] [GET pattern [GET pattern ...]] [ASC|DESC] [ALPHA] [STORE destination]

如果不仔细看文档,或者看源码,一下子真的不知道这个命令怎么用。首先我们可以去掉LIMIT offset count这个选项,这个很容易理解,就是排好序之后取偏移数据。ASC和DESC这个也比较容易,就是正向和逆向排序。STORE destination这个其实就是将排好序的数据放到destination这个list里面,也比较容易理解。好了,去掉这些,那么sort的原型就是这个样子了:

SORT key [BY pattern] [GET pattern [GET pattern ...]] [ALPHA]

key里面存储的就是需要排序的东西,所以key只能是list,set或者zset类型,我们以list为例。假设做如下操作:

redis> lpush a 1 2 3redis> lrange a 0 -11) "3"2) "2"3) "1"

如果使用sort,则排序结果如下:

redis> sort a1) "1"2) "2"3) "3"

那么ALPHA是什么意思呢?我们可以做如下操作解释:

redis> lpush b a1 a2 a3redis> sort b(error) ERR One or more scores can't be converted into doubleredis> sort b alpha1) "a1"2) "a2"3) "a3"

我们在b里面压入的是字符串,所以不能直接sort,必须指定alpha方式。所以alpha就是明确告知sort使用字节序排序,不然sort就会尝试将需要排序的数据转成double类型。

理解了alpha,我们再来看看by的含义,如下例子:

redis> set w_1 30redis> set w_2 20redis> set w_3 10redis> sort a by w_*1) "3"2) "2"3) "1"127.0.0.1:6379>

如果有by了,sort就会首先取出对应的数据,也就是1,2,3,然后跟by的pattern进行组合,变成w_1,w_2,w_3,然后以这个作为key去获取对应的值,也就是30,20,10,再按照这些值进行排序。上面这个例子,1对应的by值最大,为30,所以升序排列的时候在最后。

说完了by,我们再来说说get,get是不参与排序的,只是在排完序之后,将排好序的值依次跟get的pattern组合,获取对应的数据,进行返回,如下例子:

redis> set o_1 10redis> set o_2 20redis> set o_3 30redis> sort a get o_*1) "10"2) "20"3) "30"

再来一个多个get的例子:

redis> set oo_1 100redis> set oo_2 200redis> set oo_3 300redis> sort a get o_* get oo_*1) "10"2) "100"3) "20"4) "200"5) "30"6) "300"

从上面可以看到,如果有多个get,那么sort的做法是对于排好序的一个值,依次通过get获取值,放到结果中,然再处理下一个值。

如果有get,我们就能获取到相关的值,但这时候我们还需要返回原有的值怎么办?只需要get #就成了,如下:

redis> sort a get o_* get #1) "10"2) "1"3) "20"4) "2"5) "30"6) "3"

转载于:https://my.oschina.net/dabird/blog/758044

你可能感兴趣的文章
突破360防黑加固添加用户
查看>>
数据仓库建模方法初步
查看>>
Active Directory 回收站配置篇
查看>>
ubuntu 11.10 体验
查看>>
MS UC 2013-0-虚拟机-标准化-部署-2-模板机-制作-5
查看>>
隐藏nginx、apache与php版本号
查看>>
【STM32 .Net MF开发板学习-08】远程PLC读写控制
查看>>
Lync 小技巧-12-同台服务器删除Lync Server 2010安装Lync Server 2013
查看>>
【STM32 .Net MF开发板学习-17】Wifi遥控智能小车
查看>>
做程序,要“专注”和“客观”
查看>>
运维常用表格
查看>>
6.VMware View 4.6安装与部署-view桌面克隆与分配
查看>>
Azure恢复服务-DPM联机备份SQL数据库
查看>>
大分区使用xfs文件系统存储备份遇到的问题
查看>>
记录-三步走FreeMarker Template学习
查看>>
vsts项目管理理论基础——MSF
查看>>
Cocos2d-x Eclipse下程序运行产生错误Effect initCheck() returned -1
查看>>
Unity依赖注入使用详解
查看>>
Windows GVim
查看>>
kernel_read【转】
查看>>