Redis之排序

1.sort命令

sort命令可以对列表类型、集合类型和有序集合类型进行排序。

sort key

集合类型经常被用于存储对象的ID,很多情况下都是整数。所以redis对这种情况进行了特殊的优化,元素的排列是有序的。

在对有序集合类型排序时会忽略元素的分数,只针对元素自身的值进行排序。

sort命令可以通过alpha参数实现按照字典顺序排列非数字元素。

sort key alpha

如果没有加alpha参数的话,sort命令会尝试将所有元素转换成双精度浮点数来比较,如果无法转换则会提示错误。

sort命令的desc参数可以实现将元素按照从大到小的顺序排列。

sort命令支持分页,limit offset count。

2.by参数

Redis之排序_第1张图片

by参数的语法为by参考键。其中参考键可以是字符串类型键或者是散列类型键的某个字段(表示键名->字段名)。如果提供了by参数,sort命令将不再依据元素自身的值进行排序,而是对每个元素使用元素的值替换参考键中的第一个*并获取其值,然后依据该值对元素排序。

除散列类型外,参考键还可以是字符串类型。

Redis之排序_第2张图片

当参考键不包含*时(即常量键名,与元素值无关),sort命令 将不会执行排序操作,因为redis认为这种情况是没有意义的。

如果几个元素的参考键值相同,则sort命令会再比较元素本身的值来决定元素的顺序。

当某个元素的参考键不存在时,会默认参考键的值为0。

3.get参数

get参数不影响排序,它的作用是使sort命令的返回结果不再是元素自身的值,而是get参数中指定的键值。get参数和by参数一样,get参数也支持字符串类型和散列类型的键,并使用*作为占位符。

Redis之排序_第3张图片

Redis之排序_第4张图片

在一个sort命令中可以有多个get参数(by参数只能有一个)。

get # 返回元素本身的值。

4.store参数

使用store参数保存排序的结果。保存后的键的类型为列表类型,如果键已经存在则会覆盖。返回值为结果的个数。

7.性能优化

sort命令的时间复杂度是O(n+m*log(m))。其中n表示要排序的列表(集合或有序集合)中的元素个数,m表示要返回的元素个数。所以开发中使用sort命令时需要注意:

(1)尽可能减少待排序键中元素的数量(使N尽可能小)

(2)使用limit参数只获取需要的数据

(3)如果排序的数据量较大,尽可能使用store参数将结果缓存

你可能感兴趣的:(redis)