*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 类型。