Redis提供了为键设置过期时间的功能,可以让键在指定的时间之后自动被移除,从而避免了需要在指定的时间内手动删除操作的麻烦。
一、设置键的生存时间
通过 EXPIRE 命令或者 PEXPIRE 命令可以为键设置一个生存时间,当一个键的生存时间消耗殆尽时,Redis就会移除这个键。
EXPIRE 命令用于设置秒级精度的生存时间,它可以让键在指定的秒数之后自动被移除;
而 PEXPIRE 命令则用于设置毫秒级精度的生存时间,让键在指定的毫秒数之后自动被移除;
语法格式:
EXPIRE key seconds
PEXPIRE key milliseconds
如,
# 设置键user.101的生存时间为5秒
EXPIRE user.101 5
# 设置键user.102的生存时间为500毫秒
PEXPIRE user.102 500
EXPIRE 命令和 PEXPIRE 命令在执行成功时返回1;如果用户给定的键并不存在,那么命令返回0表示设置失败。
当对一个已设置了生存时间的键执行 EXPIRE 命令或 PEXPIRE 命令时,键原有的生存时间将会被消除,并设置新的生存时间。
二、创建键的同时设置生存时间
Redis从2.6.12版本开始为SET命令提供了 EX 选项和 PX 选项,分别用于在创建时对键设置秒级过期时间和毫秒级过期时间。如
# 创建字符串键name的同时将其生成时间设置为5秒
SET name 'peter' EX 5
使用带有 EX 选项或 PX 选项的SET命令除了可以减少命令的调用数量并提升程序的执行速度之外,更重要的是保证了操作的原子性,使得“为键设置值”和“为键设置生存时间”这两个操作可以一起执行。
三、对键设置过期时间
设置过期时间即设置键在未来的某个时间时被消除,设置过期时间这一操作可以通过 EXPIREAT 命令或者 PEXPIREAT 命令来完成。其中,EXPIREAT 命令接受一个键和一个秒级精度的UNIX时间戳为参数,当系统的当前UNIX时间超过命令指定的UNIX时间时,给定的键就会被移除,如
# 设置键name在UNIX时间1450005000秒后被消除
EXPIREAT name 1450005000
与 EXPIRE / PEXPIRE 命令会更新键的生存时间一样,EXPIREAT / PEXPIREAT 命令也会更新键的过期时间:如果用户在执行 EXPIREAT 命令或 PEXPIREAT 命令的时候,给定键已经带有过期时间,那么命令首先会移除键已有的过期时间,再为其设置新的过期时间。
四、获取键的剩余生存时间
在为键设置了生存时间或者过期时间之后,可以使用 TTL 命令或者 PTTL 命令查看键的剩余生存时间。其中,TTL 命令将以秒为单位返回键的剩余生存时间,而 PTTL 命令则会以毫秒为单位返回键的剩余生存时间。
语法格式:
TTL key
PTTL key
如果给定的键存在,但是并没有设置生存时间或者过期时间,那么TTL命令和PTTL命令将返回 -1;
如果给定的键并不存在,那么TTL命令和PTTL命令将返回 -2;