EXPIRE、PEXPIRE:设置生存时间
用户可以通过执行 EXPIRE
命令或者 PEXPIRE
命令,为键设置一个生存时间(TTL,time to live):键的生存时间在设置之后就会随着时间的流逝而不断地减少,当一个键的生存时间被消耗殆尽时,Redis 就会移除这个键。
Redis 提供了 EXPIRE
命令用于设置秒级精度的生存时间,它可以让键在指定的秒数之后自动被移除:
- EXPIRE key seconds
而 PEXPIRE
命令则用于设置毫秒级精度的生存时间,它可以让键在指定的毫秒数之后自动被移除:
- PEXPIRE key milliseconds
EXPIRE
命令和 PEXPIRE
命令在生存时间设置成功时返回 1
;如果用户给定的键并不存在,那么命令返回 0
表示设置失败。
以下是一个使用 EXPIRE
命令的例子:
- redis> SET msg "hello world"
- OK
- redis> EXPIRE msg 5
- (integer) 1
- redis> GET msg -- 在 5 秒钟之内访问,键存在
- "hello world"
- redis> GET msg -- 在 5 秒钟之后访问,键不再存在
- (nil)
上面的代码通过执行 EXPIRE
命令为 msg
键设置了 5 秒钟的生存时间:
如果我们在 5 秒钟之内访问
msg
键,那么 Redis 将返回msg
键的值"hello world"
;但如果我们在 5 秒钟之后访问
msg
键,那么 Redis 将返回一个空值,因为msg
键已经自动被移除了。
表 12-1 展示了 msg
键从设置生存时间到被移除的整个过程。
表 12-1 msg
键从设置生存时间到被移除的整个过程
时间(以秒为单位) | 动作 |
---|---|
0000 | 执行 EXPIRE msg 5 ,将 msg 键的生存时间设置为 5 秒钟。 |
0001 | msg 键的生存时间变为 4 秒钟。 |
0002 | msg 键的生存时间变为 3 秒钟。 |
0003 | msg 键的生存时间变为 2 秒钟。 |
0004 | msg 键的生存时间变为 1 秒钟。 |
0005 | msg 键因为过期被移除。 |
而以下则是一个使用 PEXPIRE
命令的例子:
- redis> SET number 10086
- OK
- redis> PEXPIRE number 6500
- (integer) 1
- redis> GET number -- 在 6500 毫秒(也即是 6.5 秒)之内访问,键存在
- "10086"
- redis> GET number -- 在 6500 毫秒之后访问,键不再存在
- (nil)
表 12-2 展示了 number
键从设置生存时间到被移除的整个过程。
表 12-2 number
键从设置生存时间到被移除的整个过程
时间(以毫秒为单位) | 动作 |
---|---|
0000 | 执行 PEXPIRE number 6500 ,将 number 键的生存时间设置为 6500 毫秒。 |
0001 | number 键的生存时间变为 6499 毫秒。 |
0002 | number 键的生存时间变为 6498 毫秒。 |
0003 | number 键的生存时间变为 6497 毫秒。 |
…… | …… |
6497 | number 键的生存时间变为 3 毫秒。 |
6498 | number 键的生存时间变为 2 毫秒。 |
6499 | number 键的生存时间变为 1 毫秒。 |
6500 | number 键因为过期而被移除。 |
更新键的生存时间
当用户对一个已经带有生存时间的键执行 EXPIRE
命令或是 PEXPIRE
命令时,键原有的生存时间将会被移除,并设置上新的生存时间。
举个例子,如果我们执行以下命令,将 msg
键的生存时间设置为 10 秒钟:
- redis> EXPIRE msg 10
- (integer) 1
然后在 10 秒钟之内执行以下命令:
- redis> EXPIRE msg 50
- (integer) 1
那么 msg
键的生存时间将被更新为 50 秒钟,并重新开始倒数,表 12-3 展示了这个更新过程。
表 12-3 msg
键生存时间的更新过程
时间(以秒为单位) | 动作 |
---|---|
0000 | 执行 EXPIRE msg 10 命令,将 msg 键的生存时间设置为 10 秒钟。 |
0001 | msg 键的生存时间变为 9 秒钟。 |
0002 | msg 键的生存时间变为 8 秒钟。 |
0003 | msg 键的生存时间变为 7 秒钟。 |
0004 | 执行 EXPIRE msg 50 命令,将 msg 键的生存时间更新为 50 秒钟。 |
0005 | msg 键的生存时间变为 49 秒钟。 |
0006 | msg 键的生存时间变为 48 秒钟。 |
0007 | msg 键的生存时间变为 47 秒钟。 |
…… | …… |
其他信息
属性 | 值 |
---|---|
复杂度 | EXPIRE 命令和 PEXPIRE 命令的复杂度都为 O(1) |
版本要求 | EXPIRE 命令从 Redis 1.0.0 版本开始可用,PEXPIRE 命令从 Redis 2.6.0 版本开始可用。 |