*Redis HPEXPIREAT 命令

为 Hash 中的一个或多个 field 设置绝对过期时间(Unix 时间戳,毫秒)。Redis 7.4+ 引入。


*语法

HPEXPIREAT key milliseconds-timestamp field [field ...] [NX | XX | GT | LT]

*参数说明

参数 类型 必填 说明
key String Hash 键名
milliseconds-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 毫秒级时间戳过期
> HPEXPIREAT user:1001 1735689600000 name
1) (integer) 1

# 检查
> HPEXPIRETIME user:1001 name
1) (integer) 1735689600000

*常见错误

  1. 对非 Hash 使用:返回 WRONGTYPE。

*最佳实践

  1. 毫秒级绝对时间:需要精确到毫秒的固定时间过期时使用。

*FAQ

Q: HPEXPIREAT 和 HEXPIREAT 有什么区别? A: HPEXPIREAT 时间戳以毫秒为单位;HEXPIREAT 以秒为单位。两者功能相同,精度不同。