TTL、PTTL:获取键的剩余生存时间
在为键设置了生存时间或者过期时间之后,用户可以使用 TTL
命令或者 PTTL
命令查看键的剩余生存时间,也即是,键还有多久才会因为过期而被移除。
其中,TTL
命令将以秒为单位返回键的剩余生存时间:
- TTL key
而 PTTL
命令则会以毫秒为单位返回键的剩余生存时间:
- PTTL key
作为例子,以下代码展示了如何使用 TTL
命令和 PTTL
命令去获取 msg
键的剩余生存时间:
- redis> TTL msg
- (integer) 297 -- msg 键距离被移除还有 297 秒
- redis> PTTL msg
- (integer) 295561 -- msg 键距离被移除还有 295561 毫秒
没有剩余生存时间的键和不存在的键
如果给定的键存在,但是并没有设置生存时间或者过期时间,那么 TTL
命令和 PTTL
命令将返回 -1
:
- redis> SET song_title "Rise up, Rhythmetal"
- OK
- redis> TTL song_title
- (integer) -1
- redis> PTTL song_title
- (integer) -1
另一方面,如果给定的键并不存在,那么 TTL
命令和 PTTL
命令将返回 -2
:
- redis> TTL not_exists_key
- (integer) -2
- redis> PTTL not_exists_key
- (integer) -2
TTL 命令的精度问题
在使用 TTL
命令时,我们有时候会碰到命令返回 0
的情况:
- redis> TTL msg
- (integer) 0
出现这种情况的原因在于 TTL
命令只能返回秒级精度的生存时间,所以当给定键的剩余生存时间不足一秒钟时,TTL
命令只能返回 0
作为结果。这时,如果我们使用精度更高的 PTTL
命令去检查这些键,那么就会看到它们实际的剩余生存时间,表 12-6 非常详细地描述了这一情景。
表 12-6 PTTL
命令在 TTL
命令返回 0
时仍然可以检测到键的剩余生存时间
键的剩余生存时间(以毫秒为单位) | TTL 命令的返回值 | PTTL 命令的返回值 |
---|---|---|
1001 | 1 | 1001 |
1000 | 1 | 1000 |
999 | 0 | 999 |
998 | 0 | 998 |
997 | 0 | 997 |
…… | …… | …… |
2 | 0 | 2 |
1 | 0 | 1 |
0 | 0 | 0 |
-2(键已被移除) | -2 | -2 |
其他信息
属性 | 值 |
---|---|
复杂度 | TTL 命令和 PTTL 命令的复杂度都为 O(1) 。 |
版本要求 | TTL 命令从 Redis 1.0.0 版本开始可用,PTTL 命令从 Redis 2.6.0 版本开始可用。 |