1、sort
排序最常见的是sort命令,可以对列表或者有序集合排序,最简单的排序方式如下:
> lpush list (integer) > lpush list (integer) > lpush list (integer) > sort list ) " ) " ) "
该命令常与alpha、desc、limit等搭配使用。
2、BY参数
上述的使用方法比较简单,有时候无法满足人们的需求,以学生成绩为例,人们需要按照成绩,来排序,从而得到一个相应的学号的列表,这样比较复杂的排序使用上述的方法就不好操作了,因此需要用BY参数来操作。
首先准备一个学号的列表,且最终希望这个列表按照学生的成绩排列。
> lpush list (integer)
给每个学生设置成绩,键名为stuscore:学号
> OK > OK > OK > OK > OK > OK > OK > OK >
比较容易看出,第一名是学号为555的学生,最后一名是学号为777的学生。
> sort list by stuscore:* desc ) " ) " ) " ) " ) " ) " ) " ) " ) "
可以看出,BY这个参数的实际作用是:将待排序列表中的每个键值带入到stuscore:*的*中,并对score:*进行排序,从而获得对应的学号列表。
若代入*的键值不存在,则默认为0
> del stuscore: (integer) > sort list by stuscore:* desc ) " ) " ) " ) " ) " ) " ) " ) " ) "
3、GET参数
获得到排序后的列表,可以通过这种形式获取对应学号的学生信息,如姓名。
设姓名的键名如:stuname:学号,则可以这样获取:
> MR.zhang OK > MR.wang OK > MISS.li OK > MISS.lin OK > sort list by stuscore:* desc get stuname:* ) (nil) ) (nil) ) "MR.zhang" ) (nil) ) "MISS.lin" ) "MR.wang" ) (nil) ) (nil) ) "MISS.li"
使用get #可以一并输出list中的值
> sort list by stuscore:* desc get stuname:* get # ) (nil) ) " ) (nil) ) " ) "MR.zhang" ) " ) (nil) ) " ) "MISS.lin" ) " ) "MISS.li" ) " ) "MR.wang" ) " ) (nil) ) " ) (nil) ) "
4、store参数
如果想要存储排序的结果,可以将结果存于列表中
> sort list by stuscore:* desc get stuname:* get # store sort.result (integer) > lrange sort.result - ) "" ) " ) "" ) " ) "MR.zhang" ) " ) "" ) " ) "MISS.lin" ) " ) "MISS.li" ) " ) "MR.wang" ) " ) "" ) " ) "" ) "
5、性能优化
根据《redis入门指南》:
sort命令是redis一个很强大且复杂的命令,使用不好很容易成为性能瓶颈,故在开发的时候需要注意这么几点:
1)尽可能减少待排序的元素的数量
2)使用limit,值获取需要的数据
3)如果需要获取的数据量比较大,请用store保存