redis进阶3-排序。排序命令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参数 针对有序集合,。 有用户列表:uiduser_name_{uid}user_level_{uid}
1admin9999
2jack10
3peter25
4mary70
输入数据: # 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缓存起来