*Redis HEXPIREAT 命令
为 Hash 中的一个或多个 field 设置绝对过期时间(Unix 时间戳,秒)。Redis 7.4+ 引入。
*语法
HEXPIREAT key timestamp field [field ...] [NX | XX | GT | LT]
*参数说明
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| key | String | 是 | Hash 键名 |
| timestamp | Integer | 是 | Unix 时间戳(秒) |
| field | String | 是 | 要设置过期的字段,可一次设置多个 |
| NX | 标志 | 否 | 只在 field 没有过期时间时设置 |
| XX | 标志 | 否 | 只在 field 已有过期时间时设置 |
| GT | 标志 | 否 | 只在新的过期时间大于现有过期时间时设置 |
| LT | 标志 | 否 | 只在新的过期时间小于现有过期时间时设置 |
*返回值
| 条件 | 返回值 |
|---|---|
| 对每个 field | -2: field 不存在; -1: key 不存在; 0: 条件未满足; 1: 设置成功 |
*时间复杂度
O(N),N 为 field 数量。
*示例
> HSET user:1001 name "Alice" email "alice@example.com"
(integer) 2
# 设置 name 在 2025-01-01 00:00:00 UTC 过期
> HEXPIREAT user:1001 1735689600 name
1) (integer) 1
# 检查
> HEXPIRETIME user:1001 name
1) (integer) 1735689600
*常见错误
- 对非 Hash 使用:返回 WRONGTYPE。
- 时间戳已过:如果 timestamp 小于当前时间,field 会立即过期。
*最佳实践
- 固定时间过期:需要在固定时间点(如午夜)过期时使用 HEXPIREAT。
*FAQ
Q: HEXPIREAT 和 HEXPIRE 有什么区别? A: HEXPIREAT 设置绝对过期时间(Unix 时间戳);HEXPIRE 设置相对过期时间(多少秒后过期)。