当前位置:首页 > 问答 > 正文

Redis里怎么查那个键还有多久过期,失效时间咋快速知道

主要依据Redis官方文档中关于键命令的部分,以及常见的Redis使用实践经验)

在Redis里,想知道一个键还能活多久,或者说它什么时候会失效,有两个非常直接了当的命令可以帮到你,它们就是 TTLPTTL,这两个命令就像是给键装上了生命倒计时显示器,让你一目了然。

第一个命令:TTL

TTL 是 "Time To Live" 的缩写,翻译过来就是“剩余生存时间”,你用这个命令去查一个键,Redis会告诉你这个键还有多少秒会过期。

它的用法非常简单,直接在命令行里输入 TTL 你的键的名字 就行了,你有一个叫 user:1000:session 的键,想知道它啥时候失效,就输入:

TTL user:1000:session

然后Redis会返回一个数字,这个数字有三种情况,你需要知道它们分别代表什么意思:

Redis里怎么查那个键还有多久过期,失效时间咋快速知道

  1. 返回一个大于0的整数(86):这是最常见的情况,意思是这个键是设置了过期时间的,并且还有效,返回的数字就是它还能存活的秒数,上面的例子就是说,这个键大概还能活86秒,一分多钟后就会被Redis自动删除。
  2. 返回 -1:这个结果的意思是,这个键存在,但是它根本没有设置过期时间,也就是说,只要你不手动删除它,或者Redis没有出现什么大问题,它就会永远待在数据库里,就像一个“长生不老”的键。
  3. 返回 -2:这个结果的意思是,你要查的这个键根本就不存在,Redis里找不到它,既然键都不存在,那自然也就谈不上什么过期时间了。

当你用TTL命令时,看到正数就是在倒计时,看到-1就是永不过期,看到-2就是键已消失。

第二个命令:PTTL

PTTL 和 TTL 的功能一模一样,都是查剩余过期时间,它们之间唯一的区别就是时间单位不同,TTL 返回的是秒,而 PTTL 返回的是毫秒,PTTL 里的 "P" 可以理解为 "Precise"(精确)或者 "Milliseconds"(毫秒)。

它的用法和TTL完全一样:

PTTL user:1000:session

同样,它返回的数字也代表毫秒数,返回值的情况也和TTL对应:

Redis里怎么查那个键还有多久过期,失效时间咋快速知道

  • 正数:剩余的毫秒数。
  • -1:键存在,但未设置过期时间。
  • -2:键不存在。

那你可能会问,既然有了TTL,为什么还要有个PTTL呢?主要是在需要更精确时间控制的场景下使用,你设置一个锁的过期时间是10秒,但你想在锁还剩500毫秒(半秒)的时候提前做一些处理,比如延长锁的时间或者通知客户端,这时候用PTTL获取毫秒级的精度就非常有必要了,对于日常只是看看大概还有多久过期的需求,TTL的秒级精度通常就足够了。

除了查剩余时间,还有个命令能看“绝对过期时间点”:EXPIRETIME

(这个命令是在Redis 7.0版本中新增的,所以如果你的Redis版本比较老,可能用不了。)

TTL和PTTL告诉我们的是“相对时间”,也就是从现在开始还能活多久,但有时候我们可能想知道的是这个键“死”在具体哪个时间点,这时候就可以用 EXPIRETIME 命令。

它的用法依然是 EXPIRETIME 你的键的名字

Redis里怎么查那个键还有多久过期,失效时间咋快速知道

EXPIRETIME user:1000:session

这个命令返回的是一个Unix时间戳,什么是Unix时间戳?它是一个从1970年1月1日到现在所经过的秒数,比如它可能返回 1717084800,这个数字本身看起来不直观,但你可以通过工具或者编程语言把它转换成一个我们能看懂的年月日时分秒的格式,这个时间点就是键被设定失效的那个精确时刻。

需要注意的是,这个命令只对设置了过期时间的键有效,如果键没有设置过期时间(永久的),或者键不存在,它都会返回 -1。

实战中怎么快速知道?

在实际使用中,“快速知道”的关键在于:

  1. 选对命令:大多数情况用 TTL 看个大概秒数就够了,需要更精确就用 PTTL,想知道具体在何时过期(比如用于排查问题)且Redis版本够高,就用 EXPIRETIME
  2. 理解返回值:一定要清楚 -1 和 -2 的含义,不然很容易误解,看到-1别以为是马上要过期,那其实是永不过期。
  3. 通过客户端工具:如果你是在服务器命令行操作,直接打命令就行,如果你在使用像Redis Desktop Manager、Another Redis Desktop Manager这样的图形化工具,它们通常会在界面上直接显示每个键的TTL,连命令都不用敲,一眼就能看到,这是最“快速”的方式,在编程中,你的Redis客户端库也都会提供这些命令对应的方法,调用一下就能拿到结果。

总结一下

  • TTL key:查还剩多少过期,最常用。
  • PTTL key:查还剩多少毫秒过期,更精确。
  • EXPIRETIME key:(Redis 7.0+)查过期的具体时间点

记住这三个命令,你就能轻松掌握Redis中任何键的“生死大权”和“生命倒计时”了。