*Redis ZMSCORE 命令

ZMSCORE 返回有序集合中一个或多个成员的分数。


*语法

ZMSCORE key member [member ...]

*参数说明

参数 类型 必填 说明
key String 有序集合键名
member String 要查询的成员名,支持多个

*返回值

  • Array:成员分数的数组,成员不存在时对应位置为 nil
  • Error:键类型错误

*时间复杂度

O(M·log(N)),其中:

  • N 为有序集合的基数
  • M 为查询的成员数量

*示例

*查询多个成员分数

> ZADD myzset 10 "a" 20 "b" 30 "c"
(integer) 3
> ZMSCORE myzset a b c
1) "10"
2) "20"
3) "30"

*包含不存在的成员

> ZMSCORE myzset a notexist c
1) "10"
2) (nil)
3) "30"

*批量查询

> ZADD scores 85 "Alice" 92 "Bob" 78 "Carol" 95 "David"
(integer) 4
> ZMSCORE scores Alice Bob Carol David
1) "85"
2) "92"
3) "78"
4) "95"

*常见错误

错误 原因 解决
WRONGTYPE key 不是有序集合 检查 key 类型
ERR wrong number of arguments 缺少 member 至少提供一个 member

*最佳实践

  • 场景:批量查询排行榜分数、验证成员是否存在并获取分数
  • 相比多次 ZSCORE 调用,ZMSCORE 一次返回全部结果,减少 RTT
  • 返回顺序与请求顺序严格一致,便于客户端映射
  • ZRANK 配合使用:获取排名 + 分数的完整信息
  • 不存在的成员返回 nil(不是 0),客户端需做 nil 判断

*FAQ

Q1: ZMSCORE 和 ZSCORE 的区别? A: ZSCORE 一次查一个成员;ZMSCORE 一次查多个,批量更高效。

Q2: 成员不存在时返回什么? A: 对应位置返回 nil。数组长度始终等于查询的成员数量。

Q3: 分数是整数还是浮点数? A: 返回字符串格式的双精度浮点数。即使存储的是整数,返回也是字符串形式。