*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

*常见错误

  1. 对非 Hash 使用:返回 WRONGTYPE。
  2. 时间戳已过:如果 timestamp 小于当前时间,field 会立即过期。

*最佳实践

  1. 固定时间过期:需要在固定时间点(如午夜)过期时使用 HEXPIREAT。

*FAQ

Q: HEXPIREAT 和 HEXPIRE 有什么区别? A: HEXPIREAT 设置绝对过期时间(Unix 时间戳);HEXPIRE 设置相对过期时间(多少秒后过期)。