TTL、PTTL:获取键的剩余生存时间

在为键设置了生存时间或者过期时间之后,用户可以使用 TTL 命令或者 PTTL 命令查看键的剩余生存时间,也即是,键还有多久才会因为过期而被移除。

其中,TTL 命令将以秒为单位返回键的剩余生存时间:

  1. TTL key

PTTL 命令则会以毫秒为单位返回键的剩余生存时间:

  1. PTTL key

作为例子,以下代码展示了如何使用 TTL 命令和 PTTL 命令去获取 msg 键的剩余生存时间:

  1. redis> TTL msg
  2. (integer) 297 -- msg 键距离被移除还有 297
  3.  
  4. redis> PTTL msg
  5. (integer) 295561 -- msg 键距离被移除还有 295561 毫秒

没有剩余生存时间的键和不存在的键

如果给定的键存在,但是并没有设置生存时间或者过期时间,那么 TTL 命令和 PTTL 命令将返回 -1

  1. redis> SET song_title "Rise up, Rhythmetal"
  2. OK
  3.  
  4. redis> TTL song_title
  5. (integer) -1
  6.  
  7. redis> PTTL song_title
  8. (integer) -1

另一方面,如果给定的键并不存在,那么 TTL 命令和 PTTL 命令将返回 -2

  1. redis> TTL not_exists_key
  2. (integer) -2
  3.  
  4. redis> PTTL not_exists_key
  5. (integer) -2

TTL 命令的精度问题

在使用 TTL 命令时,我们有时候会碰到命令返回 0 的情况:

  1. redis> TTL msg
  2. (integer) 0

出现这种情况的原因在于 TTL 命令只能返回秒级精度的生存时间,所以当给定键的剩余生存时间不足一秒钟时,TTL 命令只能返回 0 作为结果。这时,如果我们使用精度更高的 PTTL 命令去检查这些键,那么就会看到它们实际的剩余生存时间,表 12-6 非常详细地描述了这一情景。


表 12-6 PTTL 命令在 TTL 命令返回 0 时仍然可以检测到键的剩余生存时间

键的剩余生存时间(以毫秒为单位)TTL 命令的返回值PTTL 命令的返回值
100111001
100011000
9990999
9980998
9970997
………………
202
101
000
-2(键已被移除)-2-2

其他信息

属性
复杂度TTL 命令和 PTTL 命令的复杂度都为 O(1) 。
版本要求TTL 命令从 Redis 1.0.0 版本开始可用,PTTL 命令从 Redis 2.6.0 版本开始可用。