redis 排序(sort)
redis的排序和其它编程语言排序类似,都可以根据某些比较规则对一系列元素进行有序的排列。redis利用SORT命令可以对redis中的字符串、列表、集合、有序集合、散列中存储的数据进行排序。如果读者之前用过类似关系型数据库的话,那么redis的SORT命令可以看做SQL中的order by。
sort 命令
sort命令可以对list、set和sorted set的元素进行排序,然后显示排序的结果,但是不影响redis数据类型中存储数据的位置。就是说你对list进行元素排序,但是执行lrange命令你会发现内存中的元素的顺序是不发生任何变化的。因此sort命令的排序只是显示结果的排序。
sort排序命令的结构如下:
SORT key [BY pattern] [LIMIT start count] [GET pattern] [ASC|DESC] [ALPHA] [STORE dstkey]
下面就通过实例来一一讲解SORT排序的命令结构:
例子1、一般排序:
--像链表list中加入实验数据 lpush list 1 2 4 5 3 --查询数据在listSort链表中的物理位置 lrange list 0 -1 --简单排序 sort list --简单的降序 sort list desc
结果如下:(参数什么都不指定的情况下是按照数字升序排序的,当指定DESC时,将会 按照数字降序排序)
例子2、使用ALPHA对字符串进行排序:
--像链表list中加入实验数据 lpush list hello free world --对其使用ALPHA排序 sort list alpha
结果如下:(当list表当中有字符串时,可以使用alpha参数对其进行排序,排序的结果是数字被当做是a,字符串之间再按照ASCII值进行排序)
例子3、使用limit修饰符限制返回结果。
sort list alpha limit 2 5
结果如下:( limit 2 5指的是从list中的第二个偏移量(偏移量是从0,1,2....)开始往后取五个元素内的集合进行排序
BY pattern等参数的排序通过下面的一个简单的学生信息表进行测试。表结构数据如下:
stuid | name_stuid | age_stuid |
1 | admin | 25 |
2 | free | 29 |
3 | zhangsan | 26 |
4 | redis | 33 |
向redis中添加测试数据,代码如下:
--添加四位学生学号 lpush stulist 1 2 3 4 --添加四位学生信息 --admin mset name_1 admin age_1 25 --free mset name_2 free age_2 29 --zhangsan mset name_3 zhangsan age_3 26 --redis mset name_4 redis age_4 33
例子4、利用BY pattern通过外部key的数据作为权重进行排序,如:按照学生的年龄进行排序,代码如下:
sort stulist by age_*
例子5、按照学生姓名进行排序。代码如下:
sort stulist by name_* alpha asc
我们也可以通过get选项去获取指定pattern作为新key对应的值.
例子6、比如通过对stulist的学号进行排序获取到对应学号的学生姓名。代码如下:
sort stulist get name_*
我们也可以利用hash表存储学生的基本信息,然后再对其进行排序。数据添加代码如下:
--admin hmset stu_1 name admin age 25 --free hmset stu_2 name free age 29 --zhangsan hmset stu_3 name zhanggsan age 26 --redis hmset stu_4 name redis age 33
例子7、通过对年龄字段进行排序获,代码如下:(可以用 key->field 的格式来获取哈希表中的域的值, 其中 key 表示哈希表键, 而 field 则表示哈希表的域。)
sort stulist by stu_*->age
例子8、通过学号的排序获取学生基本信息,代码如下:
sort stulist get # get stu_*->name get stu_*->age
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论