Redis排序

1、SORT命令

 

SORT命令可以对列表类型、集合类型和有序集合类型键进行排序,并且可以完成与关系数据库中的连接查询相类似的任务。

 

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

 

除了可以排列数字外,SORT命令还可以通过 ALPHA 参数实现按照字典顺序排列非数字元素。

 

SORT mylist ALPHA

 

SORT mylist DESC 倒序

 

SORT mylist LIMIT offset count 表示跳过前offset个元素并获取之后的count个元素。

 

2、BY 参数

 

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

 

SORT tag:ruby:posts BY post:*->time 散列类型

 

SORT sortbuylist BY itemscore:* DESC 字符串类型

 

当参考键名不包含“*”时(既常量键名,与元素值无关),SORT命令将不会执行排序操作,应为Redis认为这种情况是没有意义的(因为所有要比较的值都一样)。

 

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

 

3、GET 参数

 

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

 

SORT tag:ruby:posts BY post:*->time DESC GET post:*->title

 

在一个SORT命令中可以有多个GET参数(而BY参数只能有一个)

 

SORT tag:ruby:posts BY post:*->time DESC GET post:*->title GET post:*->time

 

有N个GET参数,每个元素返回的结果就有N行。

 

4、STORE 参数

 

默认情况下SORT会直接返回排序结果,如果希望保存排序结果,可以使用STORE参数。如果希望把结果保存到 sort.result 键中:

 

SORT tag:ruby:posts BY post:*->time DESC GET post:*->title GET post:*->time STORE sort.result

 

保存后的键的类型为列表类型,如果键已经存在则会覆盖他。加上 STORE 参数后 SORT 命令的返回值为结果的个数。

 

STORE 参数常用来结合EXPIRE命令缓存排序结果。

 

5、性能优化

 

SORT是Redis中最强大最复杂的命令之一,如果使用不好很容易成为性能瓶颈。SORT命令的时间复杂度是 O(n + mlog(m)),其中n表示要排序的列表(集合或有序集合)中的元素个数,m表示要返回的元素个数。

 

使用SORT命令时需要注意以下几点:

 

尽可能减少待排序键中元素的数量;使用 LIMIT 参数只获取需要的数据;如果要排序的数据量较大,尽可能使用 STORE 参数将结果缓存。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值