*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)

*常见错误

  1. key 非 Hash 类型:返回 WRONGTYPE。

*最佳实践

  1. 替代 HGETALL:读取大 Hash 时,用 HMGET 指定需要的 field,避免 HGETALL 全量读取的阻塞风险。
  2. 缓存对象属性:存储用户对象时,用 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 存在时先用 EXISTSHLEN 判断。

Q: 可以 HMGET 所有 field 吗? A: 可以但不建议。字段多时用 HGETALLHSCAN