*Redis PEXPIREAT 命令

PEXPIREAT 用于设置键的过期时间,以 Unix 时间戳(毫秒精度)指定键将在何时过期。


*语法

PEXPIREAT key milliseconds-timestamp [NX | XX | GT | LT]

*参数说明

参数 类型 必填 说明
key String 要设置过期时间的键名
milliseconds-timestamp Integer 以毫秒为单位的 Unix 时间戳
NX Flag 仅在键没有过期时间时设置
XX Flag 仅在键已存在过期时间时设置
GT Flag 仅在新过期时间大于当前过期时间时设置
LT Flag 仅在新过期时间小于当前过期时间时设置

*返回值

  • 1:过期时间设置成功
  • 0:条件未满足(如 NX/XX/GT/LT 限制),或键不存在

*时间复杂度

O(1)

*

*示例

*基本用法

> SET mykey "hello"
OK
> PEXPIREAT mykey 1893456000000
1
> TTL mykey
(integer) 一个大于0的值

*使用条件选项

> SET session "user123"
OK
> PEXPIREAT session 1893456000000 NX
1
> PEXPIREAT session 1893456000000 NX
0

*更新过期时间(GT/LT)

> SET mykey "value"
OK
> PEXPIREAT mykey 1893456000000
1
> PEXPIREAT mykey 1893456000001 GT
1
> PEXPIREAT mykey 1893456000000 GT
0

*常见错误

错误 原因 解决
ERR value is not an integer or out of range 时间戳不是整数或超出范围 确保传入有效的毫秒时间戳
ERR wrong number of arguments 参数数量不足 检查是否传入了 key 和 timestamp
ERR syntax error 同时使用了冲突的选项(如 NX 和 XX) 确保条件选项不冲突

*最佳实践

  • 适用于精确控制键的过期时刻,如缓存失效时间对齐到整点
  • PEXPIRE 的区别:PEXPIRE 是相对时间(毫秒),PEXPIREAT 是绝对时间戳
  • 配合 Lua 脚本可实现原子化的"设置并设置过期时间"操作
  • 在缓存预热场景中,使用 PEXPIREAT 可以统一缓存失效时间

*FAQ

Q1: PEXPIREAT 和 EXPIREAT 有什么区别? A: EXPIREAT 使用秒级时间戳,PEXPIREAT 使用毫秒级时间戳。两者功能相同,只是精度不同。

Q2: 如果时间戳已经过去,会发生什么? A: 键会立即被删除,返回 1。

Q3: 可以同时使用 NX 和 GT 吗? A: 可以,NX 和 GT/LT 是不同维度的条件限制,可以组合使用。但 NX 和 XX 不能同时使用。

Q4: 如何查看键的过期时间戳? A: 使用 PTTL key 查看剩余毫秒数,或使用 OBJECT IDLETIME 获取信息。