*Redis PSETEX 命令

PSETEX 设置 key 的值,并同时指定过期时间(毫秒)。


*语法

PSETEX key milliseconds value

*参数说明

参数 类型 必填 说明
key String 键名
milliseconds Integer 过期时间(毫秒)
value String / Bytes

*返回值

  • OK:设置成功
  • Error:参数错误、内存不足等

*时间复杂度

O(1)

*

*示例

*基本用法(毫秒级过期)

> PSETEX mykey 5000 "hello"
OK
> PTTL mykey
(integer) 4982
> GET mykey
"hello"

*设置验证码缓存(1分钟过期)

> PSETEX verify:code:user123 60000 "123456"
OK
> PTTL verify:code:user123
(integer) 59812
> GET verify:code:user123
"123456"

*参数错误示例

> PSETEX mykey 1000
(error) ERR wrong number of arguments for 'psetex' command

*常见错误

错误 原因 解决
ERR wrong number of arguments 参数数量不足(缺少 value 或 milliseconds) 检查参数个数
ERR value is not an integer milliseconds 非整数 传入整数毫秒值

*最佳实践

  • PSETEX 是 SET + PEXPIRE 的原子组合,避免竞态条件
  • 需要毫秒级精度的缓存场景使用 PSETEX,秒级用 SETEX 即可
  • 验证码、限流令牌、短生命周期配置等场景适合使用 PSETEX
  • 设置后应立即验证 PTTL 确认过期时间生效

*FAQ

Q1: PSETEX 和 SET PX 有什么区别? A: 功能上等效。PSETEX 是 SET key value PX milliseconds 的快捷形式。推荐使用 SET PX,因为它更灵活(支持 NX/XX/KEEPTTL 等选项)。PSETEX 保持向后兼容。

Q2: PSETEX 和 SETEX 有什么区别? A: PSETEX 以毫秒为单位,SETEX 以秒为单位。PSETEX 精度更高,适合需要毫秒级控制的场景。

Q3: PSETEX 设置已存在的 key 会怎样? A: 会覆盖原有值和过期时间。如果原 key 是其他类型(如 List、Hash),会被覆盖为 String 类型。