排序
sort key
sort key: 对指定 key 的 value 进行排序
value 必须是数字, 如果是字符串, 需要用到可选参数
sort key 升序
sort key desc 降序
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_* 要直观得多
特殊用法
在不排序的情况下获取多个与当前 key 中元素相关联的外部 key 的 value
by 一个不存在的 key
如 sort uid by noExists get user_name_* get user_level_*
先按 noExists 来排序 uid 列表
因为 noExists 不存在, 所以不排序, 直接返回当前 uid 列表
再取出相应的 user_name_{uid} 的值
功能相当于 mysql 中的联结查询
get/by hash
上面介绍的 get 和 by 参数, 其外部 key 还可以是 hash, 其语法类似指针.
假设 user_1、user_2、user_3 都保存的是 hash, 该 hash 中的 field 是 level, 现在想根据 hash 中的 level 来排序, 可以这么写:
sort key store destination
sort key store destination
将排序结果保存在 destination 中
注意事项
sort 命令较耗内存, 其时间复杂度为 O(N+M*log(M)), N 为要排序的列表或集合内的元素数量, M 为要返回的元素数量
尽可能地减少待排序 key 中 List/Set 的长度 (减小 N)
擅用 limit 参数 (减少 M)
Last updated