首页/数据/数据库速查/SORT 排序(BY/GET/LIMIT 模式)
Redis 命令96 条

SORT 排序(BY/GET/LIMIT 模式)

对 List/Set/ZSet 排序:数值默认、字符串要 ALPHA;BY 可按外部键权重排序、GET 取外部字段拼结果、LIMIT 分页;SORT_RO 是只读变体。

数据库速查数据更新于 2026-10-13

SORT 是什么

SORT 对 List、Set、ZSet 里的元素排序,并能按外部键的权重排(BY)、把元素映射成外部键的值(GET)、分页(LIMIT),结果还可以 STORE 落库。默认按数值解析比较,所以字符串集合不加 ALPHA 会直接报错。6.2 起另提供只读变体 SORT_RO,去掉了 STORE,可在副本上安全执行。它是最容易被误用的命令之一:单线程执行、复杂度 O(N log N),大集合排序会把实例卡住。

基本信息

语法SORT key [BY pattern] [LIMIT offset count] [GET pattern ...] [ASC|DESC] [ALPHA] [STORE dst]
默认排序键按元素自身解析为 double 比较
字符串排序必须加 ALPHA,否则报 scores can't be converted into double
只读变体SORT_RO(6.2+),无 STORE,可在只读副本执行
复杂度O(N log N) 排序,外加每个 GET/BY 模式的键查询开销

典型使用场景

  • 按外部权重排序:集合里存商品 ID,按 shop:*:price 权重排序输出榜单
  • 批量映射取值:BY nosort 加 GET 模式串,把 ID 集合一次性换成名称列表,省掉一轮轮 MGET
  • 有序结果分页:列表数据用 LIMIT offset count 切片返回,无需应用层全量拉取
  • 只读副本上安全排序:用 SORT_RO 避免在主库上执行重命令
  • 临时结果落库:STORE 把排序结果写成 List,供后续 LPOP 消费

排序与外部取值

排序与外部取值
# 数值排序(默认)与降序分页
RPUSH nums 3 1 2
SORT nums                     # -> 1 2 3
SORT nums DESC LIMIT 0 2      # -> 3 2
# 字符串集合必须加 ALPHA,否则报错
SADD tags a c b
SORT tags ALPHA               # -> a b c
# BY 按外部权重排序;GET 取外部字段(* 替换为元素值)
SORT shop:ids BY shop:*:price GET shop:*:name GET '#'
# BY nosort 跳过排序,只做 ID -> 名称映射
SORT shop:ids BY nosort GET shop:*:name
# 结果落库(改成只读副本上跑就用 SORT_RO)
SORT shop:ids BY shop:*:price STORE rank:top10

选项读法

选项含义使用时注意
BY pattern用外部键的值当排序权重;pattern 里 * 替换为元素缺键按 0 处理,排序结果会静默错位
BY nosort完全跳过排序,只做 GET 映射最省的批量映射写法
GET pattern把外部键的值放进结果;GET '#' 输出元素本身GET 多组时结果是多列展平
LIMIT off cnt在服务端完成分页切片省略则返回全部元素
STORE dst把结果写成 List,返回元素个数会覆盖同名键,且副本上不可用
SORT 是阻塞型重命令:N 越大越慢,且每个 BY/GET 都是额外的键查询,几万元素的集合在高并发下能把主库拖住。热点排序结果应缓存成 ZSet 或放在应用层,别让接口每次都 SORT。
SORT 对 ZSet 排序时按元素自身值比较,不理会 score;要按分数排直接用 ZRANGE 更省。

易错点

  • 字符串集合忘记 ALPHA:直接报 One or more scores can't be converted into double,排查时容易误判为数据损坏
  • BY/GET 模式指向的键缺失被当成 0 或 nil:排序与输出静默出错,上线前必须对数据完整性做校验
  • 把 SORT 当实时排序接口高频调用:单线程全量排序会把整个实例的请求延迟一起抬高
  • 在 Cluster 上使用 BY/GET:模式匹配到的键必须与源键同槽(或用 hash tag),否则报 CROSSSLOT
  • 给 SORT 加 STORE 后又在副本上执行:SORT_RO 才允许在只读副本运行,带 STORE 会报只读错误

数据来源与参考

  • Redis 官方文档: SORT
  • Redis 官方文档: SORT_RO

相关工具

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌