这里写目录标题
12.3 EXPIREAT、PEXPIREAT:设置过期时间
Redis用户不仅可以通过设置生存时间来让键在指定的秒数或毫秒数之后自动被移除,还可以通过设置过期时间(expire time),让Redis在指定UNIX时间来临之后自动移除给定的键。
设置过期时间这一操作可以通过EXPIREAT命令或者PEXPIREAT命令 来完成。其中,EXPIREAT命令接受一个键和一个秒级精度的UNIX时 间戳为参数,当系统的当前UNIX时间超过命令指定的UNIX时间时,给 定的键就会被移除:

与此类似,PEXPIREAT命令接受一个键和一个毫秒级精度的UNIX时间 戳为参数,当系统的当前UNIX时间超过命令指定的UNIX时间时,给定 的键就会被移除:

12.3.1 EXPIREAT使用示例
如果我们想要让msg键在UNIX时间1450005000s之后不再存在,那么可 以执行以下命令:

在执行这个EXPIREAT命令之后,如果我们在UNIX时间1450005000s或 之前访问msg键,那么Redis将返回msg键的值:

如果我们在UNIX时间1450005000s之后访问msg键,那么Redis将返回一 个空值,因为这时msg键已经因为过期而自动被移除了:

表12-4展示了msg键从设置过期时间到被移除的整个过程。

12.3.2 PEXPIREAT使用示例
以下是一个使用PEXPIREAT命令设置过期时间的例子,这个命令可以 将number键的过期时间设置为UNIX时间1450005000000ms:

在UNIX时间1450005000000ms或之前访问number键可以得到它的值:

而在UNIX时间1450005000000ms之后访问number键则只会得到一个空 值,因为这时number键已经因为过期而自动被移除了:

表12-5展示了number键从设置过期时间到被移除的整个过程。

12.3.3 更新键的过期时间
与EXPIRE/PEXPIRE命令会更新键的生存时间一样, EXPIREAT/PEXPIREAT命令也会更新键的过期时间:如果用户在执行 EXPIREAT命令或PEXPIREAT命令的时候,给定键已经带有过期时间,那么命令首先会移除键已有的过期时间,然后再为其设置新的过期时间。
比如在以下调用中,第二条EXPIREAT命令就将msg键的过期时间从原来的1500000000修改成了1600000000:

12.3.4 自动过期特性的不足之处
无论是本节介绍的EXPIREAT/PEXPIREAT,还是前面介绍的EXPIRE/PEXIRE,它们都只能对整个键进行设置,而无法对键中的某个元素进行设置,比如,用户只能对整个集合或者整个散列设置生存时 间/过期时间,但是却无法为集合中的某个元素或者散列中的某个字段 单独设置生存时间/过期时间,这也是目前Redis的自动过期功能的一个缺陷。
12.3.5 其他信息
复杂度:EXPIREAT命令和PEXPIREAT命令的复杂度都为O(1)。
版本要求:EXPIREAT命令从Redis 1.2.0版本开始可用,PEXPIREAT命 令从Redis 2.6.0版本开始可用。
参考目录
绝大多数 内容来自 Redis使用手册 (黄健宏 著) 第12章 自动过期
本文介绍了Redis中使用EXPIREAT和PEXPIREAT命令设置键的过期时间,包括使用示例和更新过期时间的方法。同时,指出了自动过期特性无法对键内元素单独设置过期时间的局限性。

3441

被折叠的 条评论
为什么被折叠?



