Redis的排序
SORT命令:
SORT命令可以对列表类型、集合类型和有序集合类型键进行排序,并且可以完成与关系数据库中的连接查询相类似的任务。
除了可以排列数字外,SORT命令还可以通过ALPHA参数实现按照字典顺序排列非数字元素。
SORT命令默认是按照从小到大的顺序排列,如果想从大到小的顺序排列,需要使用DESC参数。
SORT命令实现分页:通过支持LIMIT参数来返回指定范围的结果。用法和SQL语句一样,LIMIT offset count,表示跳过前offset个元素并获取之后的count个元素。
BY参数:
一般存储数据时都以对象的ID为标识,但更多的时候我们希望根据ID对应的对象的某个属性进行排序。
BY参数的语法为“BY参考键”。参考键可以是字符串类型的键或者是散列类型键的某个字段(表示为键名->字段名)。
如果提供了BY参数,SORT命令将不再依据元素自身的值进行排序,而是对每个元素使用元素的值替换参考键中的第一个“*”并获取其值,然后依据该值对元素排序。
例如:SORT tag:ruby:posts BY post:*->time DESC
GET参数:
GET参数不影响排序,它的作用是使SORT命令的返回结果不再是元素自身的值,而是GET参数中指定的键值。
例如:SORT tag:ruby:posts BY post:*->time DESC GET post:*->title
STORE参数:
SORT命令会直接返回排序结果,如果希望保存排序结果,可以使用STORE参数。STORE参数常用来结合EXPIRE命令缓存排序结果。示例伪代码:
#判断是否存在之前排序结果的缓存
$isCacheExists = EXISTS cache.sort
if $isCacheExists is 1
#如果存在则直接返回
return LRANGEcache.sort, 0, -1
else
#如果不存在,则使用SORT命令排序并将结果存入cache.sort键中作为缓存
$sortResult =SORT some.list STORE cache.sort
#设置缓存的生存时间为10分钟
EXPIREcache.sort, 600
#返回排序结果
return$sortResult