*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: 返回字符串格式的双精度浮点数。即使存储的是整数,返回也是字符串形式。