首页/数据/数据库速查/TTL / PTTL / PERSIST 查询与移除过期
Redis 命令96 条

TTL / PTTL / PERSIST 查询与移除过期

TTL 返回剩余秒数:-1 表示键存在但无过期、-2 表示键不存在;PERSIST 移除过期让键永久保存。

数据库速查数据更新于 2026-10-13

TTL / PTTL / PERSIST 是什么

TTL 查询键的剩余生存秒数,PTTL 是毫秒版;PERSIST 移除键上的过期时间,让它变成永久键。TTL 的返回约定很关键:-1 表示键存在但没有过期时间,-2 表示键根本不存在,非负数才是剩余秒数;PTTL 的 -1/-2 语义完全相同。

基本信息

适用版本Redis 全版本;TTL 秒级精度,PTTL 毫秒
语法TTL key / PTTL key / PERSIST key
返回值-1 无过期;-2 键不存在;>=0 剩余时间
权限普通读写权限即可
相关命令EXPIRE / PEXPIRE / SETEX / EXPIREAT

典型使用场景

  • 巡检缓存:确认热点 key 的 TTL 是否符合预期,避免永久键堆满内存
  • 排查内存泄漏:SCAN 抽样统计无过期键的比例,定位忘记设 TTL 的写入方
  • 锁续期:检查锁剩余时间,决定是否需要延长,避免业务没跑完锁先到期
  • 临时键转永久:把确认要长期保留的键用 PERSIST 固定,避免被过期规则清掉
  • 结合 INFO keyspace 看 expires 数量,评估过期键规模是否合理

示例

示例
SET a v              # 无过期
TTL a                # -1:键存在但永久有效
SET b v EX 100
TTL b                # 100
TTL missing          # -2:键不存在,注意与 -1 区分
PTTL b               # 99500 左右,毫秒精度
PERSIST b            # 返回 1:成功移除过期时间
TTL b                # -1:已变永久键
PERSIST a            # 返回 0:本来就没有过期时间

返回值逐列读法

返回值含义常见误判
-1键存在,但没有设置过期时间被当成键不存在而重复回源写缓存
-2键不存在或已过期被清除被当成永久键而漏做回源
>=0剩余生存时间,秒(PTTL 为毫秒)拿它做精确倒计时,忽略删除是近似的
PERSIST 1/01=成功移除过期;0=键不存在或本来无过期把 0 当作命令执行失败
TTL 是近似值而不是倒计时契约:惰性删除加定期删除的机制决定了键在过期后可能仍短暂存在,不能用它做精确调度。
过期键在从库上不会被主动删除,从库读到的 TTL 可能仍显示未过期,直到主库发来 DEL 命令;判断过期状态以主库为准。

易错点

  • 把 TTL 返回 -1 当成键不存在,导致反复回源和缓存击穿
  • 漏设过期时间生成大量永久键,内存持续上涨且无法自动回收
  • 用 TTL 做精确倒计时或定时触发,忽略过期删除的近似性和主从差异
  • 依赖大 key 自然过期回收:过期瞬间的惰性删除同样会在主线程产生延迟毛刺
  • 在从库上用 PERSIST 判断数据状态:从库存在过期未删的键,结果与主库不一致

数据来源与参考

  • Redis 官方文档: TTL
  • Redis 官方文档: PERSIST

相关工具

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌