Redis 排序
有序集合的集合操作
集合类型提供了强大的集合操作命令,但是如果需要排序就要用到有序集合类型.有序集合常见的使用场景是大数据排序,如玩家的排行榜,所以很少会需要获得键中的全部数据
sort命令
sort命令可以对列表类型,集合类型,和有序集合类型键进行排序.
1 | sort mylist # 即可排序 |
对有序集合类型进行排序时会忽略元素的分数,只针对元素自身的值进行排序.
1 | ZADD myzset 50 2 40 3 20 1 60 5 |
sort还可以通过ALPHA参数实现按照字段顺序排序非数字元素
1 | SORT myalphalist ALPHA |
加入DESC进行倒序排列
1 | SORT mylist DESC |
指定limit 参数来指定返回范围的结果
1 | SORT mylist DESC LIMIT 1 2 # 跳过第一个元素获取后面两个元素 |
By参数
很多情况下列表,集合,有序集合中存储的都是代表对象的对象ID,单纯对这些ID排序意义不大,更有用的是根据ID对应的对象的某一个属性进行排序. 这时需要使用BY参数
by参数的语法为BY参考键其中参考键可以是字符串类型键或者是散列类型键的某一个字段(表示为散列键名->字段名) 如果使用了BY参数,sort命令将不再按照元素自身的值进行排序,而是对每个元素使用元素的值替换参考键中的第一个*并获取其值,然后依据该值对元素排序.
1 | sort mylist BY post:*->time DESC |
参考键也可以是字符串类型
1 | LPUSH sortbylist 2 1 3 |
GET 参数
GET 参数不影响排序,它的作用是使SORT命令的返回结果不再是元素自身的值,而是GET参数中指定的键值.GET参数的规则和BY参数一样,GET参数也支持字符串类型和散列类型的键,并使用”*” 作为占位符.
要实现排序后直接返回排序用的值,可以这样
1 | SORT mylist By post:*->time DESC GET post:*->time |
GET # 返回元素本身的值.
STORE 参数
默认情况下 sort 会直接返回排序结果,如果希望保存排序结果,可以使用STORE 参数,
Author: corn1ng
Link: https://corn1ng.github.io/2018/01/28/Redis 排序/
License: 知识共享署名-非商业性使用 4.0 国际许可协议