本文介绍: EXPIRE命令和PEXPIRE命令可以为键设置生存时间,当键的生存时间随着时间的流逝而消耗殆尽时,键就会被移除。对已经带有生存时间的键执行EXPIRE命令或PEXPIRE命令,将导致键已有的生存时间被新的生存时间替代。为了方便用户,Redis给SET命令增加了EX和PX两个选项,它们可以用户执行SET命令的同时,执行EXPIRE命令或PEXPIRE命令。EXPIREAT命令和PEXPIREAT命令可以为键设置UNIX时间戳格式过期时间,当系统时间超过这个过期时间时,键就会被移除

1. 自动过期

Redis提供了自动的键过期功能key expiring)。通过这个功能,用户可以让特定的键在指定的时间之后自动移除,从而避免了需要在指定时间内手动执行删除操作的麻烦。


1.1 EXPIRE、PEXPIRE:设置生存时间

用户可以通过执行EXPIRE命令或者PEXPIRE命令为键设置一个生存时间(Time ToLive, TTL):键的生存时间在设置之后就会随着时间的流逝而不断地减少,当一个键的生存时间被消耗殆尽时,Redis就会移除这个键。

Redis提供了EXPIRE命令用于设置秒级精度的生存时间,它可以让键在指定的秒数之后自动移除
在这里插入图片描述
而PEXPIRE命令则用于设置毫秒级精度的生存时间,它可以让键在指定的毫秒数之后自动移除

在这里插入图片描述

用户一个已经带有生存时间的键执行EXPIRE命令或PEXPIRE命令时,键原有的生存时间将会被移除,并设置新的生存时间。

示例

以下是一个使用EXPIRE命令的例子
在这里插入图片描述
以下是一个使用PEXPIRE命令的例子
在这里插入图片描述

说明:

复杂度:EXPIRE命令和PEXPIRE命令的复杂度都为O(1)。


1.2 SET命令的EX选项和PX选项

因为SET命令和EXPIRE/PEXPIRE命令组合使用的情况如此常见,所以为了方便用户使用这两组命令,Redis从2.6.12版本开始为SET命令提供EX选项和PX选项,用户可以通过使用两个选项的其中一个来达到同时执行SET命令和EXPIRE/PEXPIRE命令的效果

语法

在这里插入图片描述
也就是说,如果我们之前执行的是SET命令和EXPIRE命令:

在这里插入图片描述

那么现在只需要执行一条带有EX选项的SET命令就可以了:
在这里插入图片描述
与此类似,如果我们之前执行的是SET命令和PEXPIRE命令:
在这里插入图片描述
那么现在只需要执行一条带有PX选项的SET命令就可以了:
在这里插入图片描述

示例:

在这里插入图片描述

说明:

复杂度:O(1)。


1.3 EXPIREAT、PEXPIREAT:设置过期时间

Redis用户不仅可以通过设置生存时间来让键在指定的秒数或毫秒数之后自动移除,还可以通过设置过期时间(expire time),让Redis在指定UNIX时间来临之后自动移除给定的键。

设置过期时间这一操作可以通过EXPIREAT命令或者PEXPIREAT命令来完成。

语法

EXPIREAT命令接受一个键和一个秒级精度的UNIX时间戳为参数,当系统的当前UNIX时间超过命令指定的UNIX时间时,给定的键就会被移除
在这里插入图片描述

PEXPIREAT命令接受一个键和一个毫秒级精度的UNIX时间戳为参数,当系统的当前UNIX时间超过命令指定的UNIX时间时,给定的键就会被移除。
在这里插入图片描述
与EXPIRE/PEXPIRE命令会更新键的生存时间一样,EXPIREAT/PEXPIREAT命令也会更新键的过期时间:如果用户在执行EXPIREAT命令或PEXPIREAT命令的时候,给定键已经带有过期时间,那么命令首先会移除键已有的过期时间,然后再为其设置新的过期时间。

示例:

如果我们想要让msg键在UNIX时间1450005000s之后不再存在,那么可以执行以下命令:
在这里插入图片描述

说明:

复杂度:EXPIREAT命令和PEXPIREAT命令的复杂度都为O(1)。

用户只能对整个集合或者整个散列设置生存时间/过期时间,但是却无法为集合中的某个元素或者散列中的某个字段单独设置生存时间/过期时间,这也是目前Redis的自动过期功能的一个缺陷


1.4 TTL、PTTL:获取键的剩余生存时间

在为键设置了生存时间或者过期时间之后,用户可以使用TTL命令或者PTTL命令查看键的剩余生存时间,即键还有多久才会因为过期而被移除。

语法

TTL命令将以秒为单位返回键的剩余生存时间:
在这里插入图片描述PTTL命令则会以毫秒为单位返回键的剩余生存时间:
在这里插入图片描述

如果给定的键存在,但是并没有设置生存时间或者过期时间,那么TTL命令和PTTL命令将返回-1。如果给定的键并不存在,那么TTL命令和PTTL命令将返回-2

示例:

在这里插入图片描述

说明:

复杂度:TTL命令和PTTL命令的复杂度都为O(1)。

使用TTL命令时,有时候会遇到命令返回0的情况:
在这里插入图片描述
出现这种情况的原因在于TTL命令只能返回秒级精度的生存时间,所以当给定键的剩余生存时间不足1s时,TTL命令只能返回0作为结果。这时,如果使用精度更高的PTTL命令去检查这些键,就会看到它们实际的剩余生存时间。下表非常详细地描述了这一情景。
在这里插入图片描述


1.5 小结

  • EXPIRE命令和PEXPIRE命令可以为键设置生存时间,当键的生存时间随着时间的流逝而消耗殆尽时,键就会被移除。
  • 对已经带有生存时间的键执行EXPIRE命令或PEXPIRE命令,将导致键已有的生存时间被新的生存时间替代。
  • 为了方便用户,Redis给SET命令增加了EX和PX两个选项,它们可以让用户在执行SET命令的同时,执行EXPIRE命令或PEXPIRE命令。
  • EXPIREAT命令和PEXPIREAT命令可以为键设置UNIX时间戳格式的过期时间,当系统时间超过这个过期时间时,键就会被移除。
  • Redis的自动过期特性只能应用于整个键,它无法对键中的某个元素单独执行过期操作。
  • TTL命令和PTTL命令可以分别以秒级和毫秒级这两种精度来获取键的剩余生存时间。
  • 通过重复对键执行EXPIRE命令或PEXPIRE命令,程序可以构建出一种自动淘汰冷数据并保留热数据的机制。


原文地址:https://blog.csdn.net/I_r_o_n_M_a_n/article/details/124645226

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。

如若转载,请注明出处:http://www.7code.cn/show_8673.html

如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱:suwngjj01@126.com进行投诉反馈,一经查实,立即删除

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注