*Redis HPEXPIRE 命令
HPEXPIRE 为 Hash 中的指定字段设置以毫秒为单位的过期时间(Redis 7.4+)。
*语法
HPEXPIRE key milliseconds [NX | XX | GT | LT] field [field ...]
*参数说明
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| key | String | 是 | Hash 键名 |
| milliseconds | Integer | 是 | 过期时间(毫秒) |
| field | String | 是 | 字段名,支持多个 |
| NX | Flag | 否 | 仅在字段无过期时间时设置 |
| XX | Flag | 否 | 仅在字段已有过期时间时更新 |
| GT | Flag | 否 | 仅在新过期时间大于当前时设置 |
| LT | Flag | 否 | 仅在新过期时间小于当前时设置 |
*返回值
- Integer:成功设置过期的字段数量
- Array:详细结果(Redis 7.4+ 扩展格式)
*时间复杂度
O(1) 每字段
*示例
*基本用法
> HSET user:1 name "Alice" temp "value"
(integer) 2
> HPEXPIRE user:1 60000 temp
(integer) 1
*条件设置
> HPEXPIRE user:1 30000 NX name
(integer) 1
> HPEXPIRE user:1 30000 NX name
(integer) 0
*常见错误
| 错误 | 原因 | 解决 |
|---|---|---|
| WRONGTYPE | key 不是 Hash | 确认 key 类型 |
| ERR value is not an integer | milliseconds 非整数 | 使用正整数 |
*最佳实践
- 使用字段级过期实现 Hash 内数据的自动清理
- 配合 NX 避免覆盖已有过期时间
- 适合实现 Hash 内的临时字段和缓存数据
*FAQ
Q1: HPEXPIRE 和 HEXPIRE 有什么区别? A: HPEXPIRE 使用毫秒;HEXPIRE 使用秒(如果存在)。
Q2: 字段过期后 Hash 会怎样? A: 字段被自动删除,如果 Hash 为空则整个 key 被删除。
Q3: 可以查看字段的剩余时间吗? A: 使用 HPTTL key field 查看字段剩余时间(毫秒)。