sort key
- sort key: 对指定 key 的 value 进行排序
- value 必须是数字, 如果是字符串, 需要用到可选参数
- sort key 升序
- sort key desc 降序
redis> LPUSH today_cost 30 1.5 10 8 (integer) 4 redis> SORT today_cost 1) "1.5" 2) "8" 3) "10" 4) "30"
sort key alpha
- sort key alpha
- 如果指定 key 的 value 是字符串, 需要加下 alpha 参数来进行排序
- sort key alpha 升序
- sort key alpha desc 降序
sort key limit offset count
- sort key limit offset count
- 对排序后的结果进行截取, 截取从 offset 处开始的 count 个元素
- sort key limit offset count 升序
- sort key limit offset count desc 降序
sort key by
- sort key by
- 通过外部其它 key 的 value 来排序, 前提是当前 key 中的元素与外部 key 中的 value 有某种联系
- 如: sort uid by user_level_*
- * 是一个占位符, 它先取出 uid 中的值, 再用这个值替换 user_level_* 中的星号, 然后根据替换后的 key 的 value 来排序
- 比如在对 uid 列表进行排序时, 就会先取出 uid 的值 2、 4、 1、 3, 然后使用 user_level_2、 user_level_4、 user_level_1 和 user_level_3 的值作为排序 uid 的权重
- 如果 by 后面的 key 不存在, 那么就会直接返回 uid 的元素(不排序)
sort key get
- sort key get
- 取出与当前 key 中元素相关联的外部 key 的 value
- 如: sort uid get user_level_*
- 先对 uid 的值进行排序, 1、2、3、4, 然后取出 user_level_1、 user_level_2、 user_level_3 和 user_level_4 的值
- get 可以批量操作
- sort uid get user_level_* get user_name_*
- get # 可以取出当前 key 的元素, 而不是与之关联的外部 key 的 value, 这个例子中就是 1、2、3、4
sort key by get
- sort key by get
- 通过组合使用 by 和 get, 可以让排序结果以更直观的方式显示出来
- 如 sort uid by user_level_* get user_name_*
- 先按 user_level_{uid} 来排序 uid 列表
- 再取出相应的 user_name_{uid} 的值
- 如 sort uid by user_level_* get user_name_*
- 通过组合使用 by 和 get, 可以让排序结果以更直观的方式显示出来
redis 127.0.0.1:6379> sort uid by user_level_* get user_name_* 1) "jack" # level = 10 2) "peter" # level = 25 3) "mary" # level = 70 4) "admin" # level = 9999
现在的排序结果要比只使用 sort uid by user_level_* 要直观得多
- 特殊用法
- 在不排序的情况下获取多个与当前 key 中元素相关联的外部 key 的 value
- by 一个不存在的 key
- 如 sort uid by noExists get user_name_* get user_level_*
- 先按 noExists 来排序 uid 列表
- 因为 noExists 不存在, 所以不排序, 直接返回当前 uid 列表
- 再取出相应的 user_name_{uid} 的值
- 先按 noExists 来排序 uid 列表
- 功能相当于 mysql 中的联结查询
- 在不排序的情况下获取多个与当前 key 中元素相关联的外部 key 的 value
get/by hash
上面介绍的 get 和 by 参数, 其外部 key 还可以是 hash, 其语法类似指针.
假设 user_1、user_2、user_3 都保存的是 hash, 该 hash 中的 field 是 level, 现在想根据 hash 中的 level 来排序, 可以这么写:
sort uid by user_*->level
sort key store destination
- sort key store destination
- 将排序结果保存在 destination 中
注意事项
sort 命令较耗内存, 其时间复杂度为 O(N+M*log(M)), N 为要排序的列表或集合内的元素数量, M 为要返回的元素数量
- 尽可能地减少待排序 key 中 List/Set 的长度 (减小 N)
- 擅用 limit 参数 (减少 M)
☠