1.sort命令
sort命令可以对列表类型、集合类型和有序集合类型进行排序。
sort key
集合类型经常被用于存储对象的ID,很多情况下都是整数。所以redis对这种情况进行了特殊的优化,元素的排列是有序的。
在对有序集合类型排序时会忽略元素的分数,只针对元素自身的值进行排序。
sort命令可以通过alpha参数实现按照字典顺序排列非数字元素。
sort key alpha
如果没有加alpha参数的话,sort命令会尝试将所有元素转换成双精度浮点数来比较,如果无法转换则会提示错误。
sort命令的desc参数可以实现将元素按照从大到小的顺序排列。
sort命令支持分页,limit offset count。
2.by参数
by参数的语法为by参考键。其中参考键可以是字符串类型键或者是散列类型键的某个字段(表示键名->字段名)。如果提供了by参数,sort命令将不再依据元素自身的值进行排序,而是对每个元素使用元素的值替换参考键中的第一个*并获取其值,然后依据该值对元素排序。
除散列类型外,参考键还可以是字符串类型。
当参考键不包含*时(即常量键名,与元素值无关),sort命令 将不会执行排序操作,因为redis认为这种情况是没有意义的。
如果几个元素的参考键值相同,则sort命令会再比较元素本身的值来决定元素的顺序。
当某个元素的参考键不存在时,会默认参考键的值为0。
3.get参数
get参数不影响排序,它的作用是使sort命令的返回结果不再是元素自身的值,而是get参数中指定的键值。get参数和by参数一样,get参数也支持字符串类型和散列类型的键,并使用*作为占位符。
在一个sort命令中可以有多个get参数(by参数只能有一个)。
get # 返回元素本身的值。
4.store参数
使用store参数保存排序的结果。保存后的键的类型为列表类型,如果键已经存在则会覆盖。返回值为结果的个数。
7.性能优化
sort命令的时间复杂度是O(n+m*log(m))。其中n表示要排序的列表(集合或有序集合)中的元素个数,m表示要返回的元素个数。所以开发中使用sort命令时需要注意:
(1)尽可能减少待排序键中元素的数量(使N尽可能小)
(2)使用limit参数只获取需要的数据
(3)如果排序的数据量较大,尽可能使用store参数将结果缓存