*Redis HGETEX 命令
HGETEX 获取 Hash 中指定字段的值,并可同时设置或清除字段的过期时间。
*语法
HGETEX key [EX seconds | PX milliseconds | EXAT timestamp | PXAT milliseconds-timestamp | PERSIST] field [field ...]
*参数说明
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| key | String | 是 | Hash 键名 |
| field | String | 是 | 字段名,支持多个 |
| EX | Integer | 否(四选一) | 过期时间(秒) |
| PX | Integer | 否(四选一) | 过期时间(毫秒) |
| EXAT | Integer | 否(四选一) | 绝对过期时间戳(秒) |
| PXAT | Integer | 否(四选一) | 绝对过期时间戳(毫秒) |
| PERSIST | Flag | 否(四选一) | 清除字段的过期时间 |
*返回值
- Array:字段值列表,不存在的字段返回 nil
*时间复杂度
O(1) 每字段
*示例
*获取并设置过期时间
> HSET user:1 name "Alice" temp "value"
(integer) 2
> HGETEX user:1 EX 60 temp
1) "value"
> HPTTL user:1 temp
(integer) 59000
*获取并清除过期时间
> HGETEX user:1 PERSIST temp
1) "value"
*常见错误
| 错误 | 原因 | 解决 |
|---|---|---|
| WRONGTYPE | key 不是 Hash | 确认 key 类型 |
| ERR wrong number of arguments | 未提供 field | 至少提供一个字段 |
*最佳实践
- 原子性获取和设置过期时间,避免竞态条件
- 适合临时字段的读取和续期
- 使用 PERSIST 清除不再需要过期的字段
*FAQ
Q1: HGETEX 和 HGET 有什么区别? A: HGETEX 在获取值的同时可以设置或清除字段的过期时间。
Q2: 可以设置多个字段的过期时间吗? A: 可以,但所有指定字段使用相同的过期时间设置。
Q3: 字段已过期会怎样? A: 已过期字段会被自动删除,返回 nil。