让技能成为潜意识之Redis技能 SORT排序命令使用
来源:互联网 发布:惠州人民政府网络问政 编辑:程序博客网 时间:2024/06/06 09:33
Sort排序命令
抛图引意
SORT的命令格式前几天有一个同事给我发了一个图,问我图中问题代表的意思,先上个图吧:
命令格式
SORT的命令格式: SORT key [BY pattern] [LIMIT offset count] [GET pattern [GET pattern ...]] [ASC|DESC] [ALPHA] [STORE destination]
默认情况下,SORT是基于数字进行正序排序,元素会被转化成双精度浮点数进行大小比对排序。如果元素中包含字符串,可以使用ALPHA进行字典顺序排列。同时对于返回的元素使用LIMIT描述符进行限制。
127.0.0.1:6379> sadd item-list 2(integer) 1127.0.0.1:6379> sadd item-list 1(integer) 1127.0.0.1:6379> sadd item-list 4(integer) 1127.0.0.1:6379> sadd item-list 3(integer) 1127.0.0.1:6379> sort item-list1) "1"2) "2"3) "3"4) "4"
外部KEY排序
Redis Sort命令可以添加BY参数,一条语句只能有一个BY参数。通过BY可以使用外部的key来作为权重对列表或集合进行排序。这时SORT不会根据自身的值进行排序,以实例来说话。
127.0.0.1:6379> hset article:1 title '这是一个标题'(integer) 1127.0.0.1:6379> hset article:1 tag 'test'(integer) 1127.0.0.1:6379> hset article:1 download 20(integer) 1127.0.0.1:6379> hset article:1 id 1(integer) 1127.0.0.1:6379> hgetall article:11) "title"2) "\xe8\xbf\x99\xe6\x98\xaf\xe4\xb8\x80\xe4\xb8\xaa\xe6\xa0\x87\xe9\xa2\x98"3) "tag"4) "test"5) "download"6) "20"7) "id"8) "1"127.0.0.1:6379> hset article:2 title '这是另一个标题'(integer) 1127.0.0.1:6379> hset article:2 tag 'test'(integer) 1127.0.0.1:6379> hset article:2 download 15(integer) 1127.0.0.1:6379> hset article:2 id 2(integer) 1127.0.0.1:6379> hset article:3 title '学习REDIS'(integer) 1127.0.0.1:6379> hset article:3 tag 'test'(integer) 1127.0.0.1:6379> hset article:3 download 30(integer) 1127.0.0.1:6379> hset article:3 id 3(integer) 1
通过BY描述符可以按照外部的key进行排序。例如,我想要按文章的下载量对item-list进行排序。
127.0.0.1:6379> sort item-list by article:*->download desc1) "3"2) "1"3) "2"4) "4"解释:article:*中的*是一个占位符,先把item-list中的值取出,代入*中,再去查找article:*中的元素download的值。在这里,article:*中的*会分别被1,2,3代替,然后得到article:1,article:2,article:3列表,根据列表的下载量(download)对item-list来排序。这样,最初发的图前半部分所要代表的意思也就可以解释出了。
不进行排序
Redis SORT命令还有个GET参数,GET参数类似在关系型数据库中的关联查询。GET可以有多个。如果要按散列表article的下载量倒序排序,然后取到article中每个元素的下载量,取到article元素的标题和编号(id),可以如下操作:
127.0.0.1:6379> sort item-list by article:*->download desc get article:*->download get article:*->title get # 1) "30" 2) "\xe5\xad\xa6\xe4\xb9\xa0REDIS" 3) "3" 4) "20" 5) "\xe8\xbf\x99\xe6\x98\xaf\xe4\xb8\x80\xe4\xb8\xaa\xe6\xa0\x87\xe9\xa2\x98" 6) "1" 7) "15" 8) "\xe8\xbf\x99\xe6\x98\xaf\xe5\x8f\xa6\xe4\xb8\x80\xe4\xb8\xaa\xe6\xa0\x87\xe9\xa2\x98" 9) "2"10) (nil)11) (nil)12) "4"
注:GET #的意思是用来获取到被排序的key的值,可以写GET article:*->id,也可以写GET #。通过GET能够一次取得多个key的值。
STORE存储
默认情况下,排序结果是返回到客户端。使用STORE命令可以将排序后的内容存储到一个新的key中。新key中的类型是列表类型,如果存在则会覆盖。用法如下:
127.0.0.1:6379> sort item-list by article:*->download desc get article:*->download store result_key(integer) 4127.0.0.1:6379> lrange result_key 0 -11) "30"2) "20"3) "15"4) ""
返回值
如果没有使用STORE描述符,返回列表形式的排序结果。如果使用STORE参数,返回排序结果的元素数量。
补充:REDIS的SORT命令是REDIS最复杂强大的命令之一,时间复杂度是O(n+mLOGm)。其中n是待排序的列表长度,m是返回的元素个数。减少n和m会提高SORT的性能。
- 让技能成为潜意识之Redis技能 SORT排序命令使用
- 让技能成为潜意识之Redis技能 Redis监控 info信息
- NoSQL之Redis---SORT排序命令
- Redis 之 sort排序
- redis之sort命令
- 技能
- 技能
- 技能
- 技能
- 技能
- redis相关技能积累
- Redis SORT排序命令实战
- Linux 命令 技能
- REDIS实践之使用sort set完成商品筛选排序
- 让你吊炸天的技能
- 游戏服务器之技能
- FED之必备技能
- linux vim使用技能
- java动态代理
- 图片显示隐藏js
- SQL Server-表表达式基础
- 小程序的坑
- 中国有多少家银行?(最全名单统计)
- 让技能成为潜意识之Redis技能 SORT排序命令使用
- js中如何判断+0与-0
- Android 仿火萤视频桌面 神奇的LiveWallPaper
- 【Angular】关于AsyncPipe你不知道的3件事!
- java 修改mat的像素数据
- HTML关键字<3>
- 超强、超详细Redis数据库入门教程
- title和alt的区别
- SQL Server-聚焦UNIOL ALL/UNION查询