Redis怎么查键的过期时间,命令用法和注意点分享
- 问答
- 2026-01-17 11:48:54
- 1
要查看Redis中一个键的过期时间,主要使用两个命令:TTL 和 PTTL,这两个命令的用途相似,但返回值的单位不同。
TTL 命令
TTL 是 "Time To Live" 的缩写,这个命令用于获取指定键剩余的生存时间,单位是秒。
- 命令用法:
TTL key_name - 返回值解读:
- 正整数:表示键剩余的生存时间,以秒为单位,返回
60表示这个键在60秒后过期。 - -1:表示键存在,但它没有设置过期时间,也就是永不过期。
- -2:表示键不存在,你查询了一个已经不存在的键的过期时间。
- 正整数:表示键剩余的生存时间,以秒为单位,返回
PTTL 命令
PTTL 是 "Precise Time To Live" 的缩写,它和 TTL 的功能完全一样,唯一的区别是它的返回值单位是毫秒,当你需要更精确的过期时间控制时,这个命令就很有用。
- 命令用法:
PTTL key_name - 返回值解读:
- 正整数:表示键剩余的生存时间,以毫秒为单位,返回
1500表示这个键在1500毫秒(即1.5秒)后过期。 - -1:表示键存在,但没有设置过期时间。
- -2:表示键不存在。
- 正整数:表示键剩余的生存时间,以毫秒为单位,返回
使用示例
假设我们在Redis中设置一个名为 mykey 的键,并给它10秒的过期时间:

0.0.1:6379> SET mykey "Hello" EX 10
OK
然后我们立即查询它的过期时间:
0.0.1:6379> TTL mykey
(integer) 8 // 大约还剩8秒
127.0.0.1:6379> PTTL mykey
(integer) 7894 // 大约还剩7894毫秒
重要的注意点分享
-
区分 -1 和 -2 的含义:这是最容易混淆的地方。
-1代表键是“永生”的,它会一直存在,除非你手动删除它。-2则代表这个键已经“死亡”了,根本不存在,在写程序逻辑时,一定要对这两个值做不同的处理。 -
过期精度可能不是绝对的:Redis的过期机制是“惰性删除”和“定期删除”相结合,这意味着,一个键即使已经到了过期时间,它可能不会立刻被删除,而是等到下次有命令访问它时,Redis才会检查并删除它。
TTL返回 -2 是绝对准确的,但当一个键的TTL显示为 0 或很小的正数时,它可能已经被逻辑上过期了,但物理上还未被移除,根据 Redis 官方文档(antirez/RiSearch)的说明,这种延迟通常是非常短暂的。
-
只能查询整个键的过期时间:
TTL/PTTL是针对整个键的,对于复杂数据类型(如 Hash, List, Set, Sorted Set),你无法查询其中某个字段或元素的单独过期时间,过期时间是设置在键本身上的。 -
如何设置过期时间:查询通常和设置配合使用,设置过期时间的常用命令有:
EXPIRE key seconds/PEXPIRE key milliseconds:为已存在的键设置过期时间。SET key value EX seconds:在设置键值的同时直接指定过期时间(秒),如上面的例子。SET key value PX milliseconds:在设置键值的同时直接指定过期时间(毫秒)。
-
持久化对过期时间的影响:当Redis进行持久化(RDB或AOF)时,过期键会被连同其过期时间一起保存,当Redis重启后加载数据,会重新恢复这些键和它们的过期状态,所以你不必担心重启后所有键都变成永久的。
-
使用场景建议:
- 在实现锁机制时,
PTTL可以用于获取更精确的锁剩余时间,从而做出更及时的决策。 - 在检查用户会话(session)是否快过期时,可以用
TTL来提醒用户或自动续期。 - 在清理缓存时,可以先通过
TTL检查一批键的剩余时间,优先处理那些即将过期的键。
- 在实现锁机制时,
TTL 和 PTTL 是Redis中用于探查键“寿命”的核心工具,理解其返回值的含义以及Redis的过期删除策略,对于编写正确、高效的Redis相关程序至关重要。-1(永生)和 -2(已死)的区别,是使用这两个命令的第一课。
本文由寇乐童于2026-01-17发表在笙亿网络策划,如有疑问,请联系我们。
本文链接:http://www.haoid.cn/wenda/82389.html
