*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 命令缓冲区),但建议单个命令不要设置过多字段,防止阻塞其他命令。