概要
在现实场景中,很多功能都是需要排序的,而且排序的字段并非有序集合的分数,那么redis提供了强大而又复杂的sort命令来帮我们解决问题。
命令
sort key [by key] [desc|asc] [get key [get key ...]] [store key]
数据准备(列表+散列):
sort tag:redis:article
sort tag:redis:article desc
sort tag:redis:article by article:*->time asc
*符号代表占位符,和struts2 action写法中的占位符一样理解,在这里代表tag:redis:article列表中的值,也就是文章的ID
sort tag:redis:article by article:*->time desc
sort tag:redis:article by article:*->time desc get article:*->title get article:*->time
如果要把文章ID也返回,可以在命令结尾加get #
sort tag:redis:article by article:*->time desc get article:*->title get article:*->time get #
sort tag:redis:article by article:*->time desc get article:*->title get article:*->time get # store article:mylist
如果此时再用sort 命令得到所有缓存的结果,会报一个错误,因为redis会尝试将字符串转换为数字进行排序在输出,所以需要在sort命令后面加上alpha参数
然后这样并不是我们需要的顺序,所以采用列表原生命令读取列表
lrange article:mylist 0 -1
0是列表左边第一个元素,-1是列表右边第一个元素
实践
可以看出sort命令提供了非常丰富的功能,使用它可以达到类似关系数据库的关联操作,非常方面
注意
功能是很强大了,但常常因为使用不当,导致redis性能急剧下滑,所以在使用时应当注意一下三点:
1.尽可能的减少带排序键中的元素2.尽可能减少输出的元素,可以使用Limit
3.将排序后的结果使用store命令缓存起来,并设置过期时间