*Redis HMSET 命令

HMSET 同时设置哈希表(Hash)的多个字段值。

⚠️ 已废弃:从 Redis 4.0 开始,HMSET 被标记为已废弃。HSET 已支持多字段设置,功能完全相同。建议使用 HSET 替代。


*语法

HMSET key field value [field value ...]

*参数说明

参数 类型 必填 说明
key String 哈希表的键名
field String 字段名,可传入多对 field-value
value String / Bytes 字段值

*返回值

  • OK:所有字段设置成功
  • Error:参数数量不是奇数(缺少 field 或 value)、key 不是哈希表类型

*时间复杂度

O(N),其中 N 为设置的字段数量。


*示例

*基本用法

> HMSET user:100 name "Alice" age "25" city "Beijing"
OK
> HGETALL user:100
1) "name"
2) "Alice"
3) "age"
4) "25"
5) "city"
6) "Beijing"

*更新已有字段

> HMSET user:100 age "26"
OK
> HGET user:100 age
"26"

*替代方案(HSET)

> HSET user:101 name "Bob" age "30" city "Shanghai"
(integer) 3

*常见错误

错误 原因 解决
ERR wrong number of arguments for HMSET field-value 不成对 确保参数为 key + 偶数个 field-value 对
WRONGTYPE Operation against a key holding the wrong kind of value key 不是哈希表类型 检查 key 的数据类型

*最佳实践

  • 新项目优先使用 HSET:HMSET 已被废弃,HSET 从 Redis 4.0 起支持多字段批量设置,返回值为新增字段数
  • 批量设置时将所有 field-value 放在一条命令中,减少网络往返
  • 超大 Hash(字段数 > 1万)建议考虑拆分为多个 Hash 键,避免单 key 过大导致性能问题

*FAQ

Q1: HMSET 和 HSET 有什么区别? A: 功能上完全相同。HMSET 永远返回 OK;HSET 返回实际新增字段的数量(已存在的字段不计入)。HMSET 已被标记为废弃。

Q2: HMSET 会覆盖已有字段吗? A: 会。如果字段已存在,HMSET 会用新值覆盖旧值,不会报错。

Q3: HMSET 的参数有数量限制吗? A: 受 Redis 单命令参数数量限制(默认约 1GB 命令缓冲区),但建议单个命令不要设置过多字段,防止阻塞其他命令。