*Redis HSETEX 命令
HSETEX 在 Hash 中设置字段值,并可同时为字段指定过期时间(Redis 7.4+)。
*语法
HSETEX key [EX seconds | PX milliseconds | EXAT timestamp | PXAT milliseconds-timestamp] field value [field value ...]
*参数说明
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| key | String | 是 | Hash 键名 |
| field | String | 是 | 字段名 |
| value | String | 是 | 字段值 |
| EX | Integer | 否(四选一) | 过期时间(秒) |
| PX | Integer | 否(四选一) | 过期时间(毫秒) |
| EXAT | Integer | 否(四选一) | 绝对过期时间戳(秒) |
| PXAT | Integer | 否(四选一) | 绝对过期时间戳(毫秒) |
*返回值
- Integer:新添加的字段数量(已存在的字段更新不计入)
*时间复杂度
O(1) 每字段
*示例
*设置带过期时间的字段
> HSETEX user:1 EX 3600 session "abc123"
(integer) 1
> HGET user:1 session
"abc123"
*设置多个字段
> HSETEX user:1 PX 60000 token "t1" refresh "r1"
(integer) 2
*常见错误
| 错误 | 原因 | 解决 |
|---|---|---|
| WRONGTYPE | key 不是 Hash | 确认 key 类型 |
| ERR wrong number of arguments | field 和 value 未成对 | 检查参数数量 |
*最佳实践
- 原子性设置值和过期时间,避免设置后忘记加过期
- 适合临时会话、缓存令牌等场景
- 使用 EXAT/PXAT 设置精确过期时间
*FAQ
Q1: HSETEX 和 HSET 有什么区别? A: HSETEX 在设置值的同时可以为字段指定过期时间。
Q2: 字段已存在会怎样? A: 更新值并重新设置过期时间(如果指定)。
Q3: 不指定过期时间会怎样? A: 等效于 HSET,字段不会过期。