*Redis PEXPIRE 命令
PEXPIRE 为指定的 key 设置过期时间(毫秒)。
*语法
PEXPIRE key milliseconds [NX | XX | GT | LT]
*参数说明
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| key | String | 是 | 键名 |
| milliseconds | Integer | 是 | 过期时间(毫秒) |
| NX | Flag | 否 | 仅在 key 无过期时间时设置 |
| XX | Flag | 否 | 仅在 key 已有过期时间时设置 |
| GT | Flag | 否 | 仅在新过期时间大于当前时设置 |
| LT | Flag | 否 | 仅在新过期时间小于当前时设置 |
*返回值
- 1:设置成功
- 0:key 不存在或条件不满足(NX/XX/GT/LT 限制)
*时间复杂度
O(1)
*
*示例
*基本用法(毫秒级过期)
> SET mykey "hello"
OK
> PEXPIRE mykey 5000
(integer) 1
> PTTL mykey
(integer) 4982
*使用条件参数
> SET session "user123"
OK
> PEXPIRE session 3600000 NX
(integer) 1
> PEXPIRE session 7200000 XX
(integer) 1
> PEXPIRE session 600000 GT
(integer) 0
*key 不存在的场景
> PEXPIRE notexist 1000
(integer) 0
*常见错误
| 错误 | 原因 | 解决 |
|---|---|---|
| ERR value is not an integer | milliseconds 非整数 | 传入整数毫秒值 |
| ERR value is not an integer or out of range | milliseconds 超出范围 | 检查数值范围 |
*最佳实践
- 需要毫秒级精度控制过期时间时使用 PEXPIRE,秒级精度用 EXPIRE 即可
- 缓存必须设置过期时间,防止内存无限增长
- 高频短生命周期缓存(如验证码、限流计数器)使用 PEXPIRE 精确控制
- 配合 PTTL 查看剩余毫秒时间,确保过期设置正确
*FAQ
Q1: PEXPIRE 和 EXPIRE 有什么区别? A: PEXPIRE 以毫秒为单位,EXPIRE 以秒为单位。PEXPIRE 精度更高,适合需要毫秒级控制的场景。
Q2: PEXPIRE 和 PEXPIREAT 有什么区别? A: PEXPIRE 是设置相对过期时间(多少毫秒后过期),PEXPIREAT 是设置绝对过期时间(Unix 时间戳,毫秒)。
Q3: 毫秒级过期有什么实际使用场景? A: 验证码有效期(5 分钟 = 300000ms)、API 限流窗口、分布式锁的续期等需要精确毫秒控制的场景。