排序命令Sort
1 sort 属于Key的命令
可以对列表类型、集合类型、有序集合类型键 进行排序。
1.1对集合排序。
1.2对list进行排序
1.3对有序集合排序,会忽略score,值对元素进行排序。
1.4 对字符串的list进行排序
1.5 limit参数,前多少名的用户
redis 127.0.0.1:6379> SORT rank LIMIT 0 51) "1"2) "2"3) "3"4) "4"5) "5"
1.6 BY参数
针对有序集合,。
有用户列表:
uid | user_name_{uid} | user_level_{uid} |
1 | admin | 9999 |
2 | jack | 10 |
3 | peter | 25 |
4 | mary | 70 |
输入数据:
# adminredis 127.0.0.1:6379> LPUSH uid 1(integer) 1redis 127.0.0.1:6379> SET user_name_1 adminOKredis 127.0.0.1:6379> SET user_level_1 9999OK# jackredis 127.0.0.1:6379> LPUSH uid 2(integer) 2redis 127.0.0.1:6379> SET user_name_2 jackOKredis 127.0.0.1:6379> SET user_level_2 10OK# peterredis 127.0.0.1:6379> LPUSH uid 3(integer) 3redis 127.0.0.1:6379> SET user_name_3 peterOKredis 127.0.0.1:6379> SET user_level_3 25OK# maryredis 127.0.0.1:6379> LPUSH uid 4(integer) 4redis 127.0.0.1:6379> SET user_name_4 maryOKredis 127.0.0.1:6379> SET user_level_4 70OK
根据uid排序:
redis 127.0.0.1:6379> SORT uid1) "1" # admin2) "2" # jack3) "3" # peter4) "4" # mary
根据其他元素排序
redis 127.0.0.1:6379> SORT uid BY user_level_*1) "2" # jack , level = 102) "3" # peter, level = 253) "4" # mary, level = 704) "1" # admin, level = 9999
user_level_*
是一个占位符, 它先取出
uid
中的值, 然后再用这个值来查找相应的键。
比如在对
uid
列表进行排序时, 程序就会先取出
uid
的值
1
、
2
、
3
、
4
, 然后使用
user_level_1
、
user_level_2
、
user_level_3
和
user_level_4
的值作为排序
uid
的权重。
1.7 组合使用by和get
redis 127.0.0.1:6379> SORT uid BY user_level_* GET user_name_*1) "jack" # level = 102) "peter" # level = 253) "mary" # level = 704) "admin" # level = 9999
可以同时使用多个get。
redis 127.0.0.1:6379> SORT uid GET user_level_* GET user_name_*1) "9999" # level2) "admin" # name3) "10"4) "jack"5) "25"6) "peter"7) "70"8) "mary
1.8 性能优化
命令复杂度O(n+mlogm)
n:排序的列表
m:返回的数目。
1.8.1优化 N尽可能小;M尽可能小;尽可能用store缓存起来