*Redis HMGET 命令
返回 Hash 中一个或多个 field 的 value。
*语法
HMGET key field [field ...]
*参数说明
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| key | String | 是 | Hash 的键名 |
| field | String | 是 | 字段名,可一次读取多个 |
*返回值
| 条件 | 返回值 |
|---|---|
| field 存在 | 返回对应 value |
| field 不存在 | nil |
| key 不存在 | 全部返回 nil |
*时间复杂度
O(N),N 为请求的 field 数量。单个 field 是 O(1)。
*示例
> HSET user:1001 name "Alice" age "30" city "Beijing"
(integer) 3
> HMGET user:1001 name age
1) "Alice"
2) "30"
# 包含不存在的 field
> HMGET user:1001 name email age
1) "Alice"
2) (nil)
3) "30"
# key 不存在
> HMGET nokey name
1) (nil)
*常见错误
- key 非 Hash 类型:返回 WRONGTYPE。
*最佳实践
- 替代 HGETALL:读取大 Hash 时,用 HMGET 指定需要的 field,避免 HGETALL 全量读取的阻塞风险。
- 缓存对象属性:存储用户对象时,用 HMGET 按需读取字段(如只读 name 和 avatar),比 JSON String 更灵活。
*FAQ
Q: HMGET 和 HGETALL 怎么选择? A: 已知需要哪些 field 时用 HMGET;需要全部 field 且 Hash 不大(<100 field)时用 HGETALL。大 Hash 永远用 HMGET/HSCAN。
Q: HMGET 返回 nil 是 field 不存在还是 key 不存在? A: 无法区分。需要确认 key 存在时先用 EXISTS 或 HLEN 判断。