Redis 过期时间的相关命令!
EXPIRE
可用版本:>= 1.0.0
时间复杂度:O(1)
命令格式
EXPIRE key seconds [NX|XX|GT|LT]
命令描述
给key设定一个存活时间(单位为秒),当key过期后会被删除;
对一个已经带有生存时间的 key 执行 EXPIRE 命令,新指定的生存时间会取代旧的生存时间。
使用DEL删除一个key后,对应的过期时间也会被删除;
使用SET、GETSET等保存命令时,过期时间会被覆盖;
对于其它命令,如果只是修改key对应的value,而不是重新设置的话,过期时间不变。例如使用INCR命令增加value值、使用LPUSH添加新的元素、使用HSET修改field对应的value;
如果对一个key,使用RENAME命令重命名,新的key继承原来key的过期时间;
使用PERSIST命令,可以清除过期时间,使key永不过期;
可选参数
自Redis 7.0,EXPIRE支持如下参数:
NX:只有当key没有设置过期时间,才会执行命令(已经设置过的,不能再设置)
XX :只有当key有过期时间,才会执行命令设置(没有设置过的,不能设置)
GT :只有当新的过期时间大于当前过期时间时,才会设置(只会增加过期时间)
LT :只有当新的过期时间大于当前过期时间时,才会设置(只会减少过期时间)
返回值
1:设置成功
0:设置失败
示例
127.0.0.1:6379> set mykey hello
OK
# 查看过期时间(永不过期)
127.0.0.1:6379> ttl mykey
(integer) -1
# 设置过期时间为100s
127.0.0.1:6379> expire mykey 100
(integer) 1
127.0.0.1:6379> ttl mykey
(integer) 98
# 再次设置,会覆盖原有的过期时间
127.0.0.1:6379> expire mykey 1000
(integer) 1
127.0.0.1:6379> ttl mykey
(integer) 997
EXPIREAT
可用版本:>= 1.2.0
时间复杂度:O(1)
命令格式
EXPIREAT key timestamp [NX|XX|GT|LT]
命令描述
与EXPIRE功能类似,不同点在于,EXPIREAT设置的过期时间为Unix秒级时间戳,而不是生存秒数。
可选参数
自Redis 7.0,EXPIREAT支持如下参数:
NX:只有当key没有设置过期时间,才会执行命令(已经设置过的,不能再设置)
XX :只有当key有过期时间,才会执行命令设置(没有设置过的,不能设置)
GT :只有当新的过期时间大于当前过期时间时,才会设置(只会增加过期时间)
LT :只有当新的过期时间大于当前过期时间时,才会设置(只会减少过期时间)
返回值
1:设置成功
0:设置失败
示例
127.0.0.1:6379> set mykey hello
OK
127.0.0.1:6379> ttl mykey
(integer) -1
# 设置过期时间
127.0.0.1:6379> expireat mykey 1632104800
(integer) 1
127.0.0.1:6379> ttl mykey
(integer) 163
EXPIRETIME
可用版本:>= 7.0.0
时间复杂度:O(1)
命令格式
EXPIRETIME key
命令描述
与EXPIREAT对应,返回key过期的秒级Unix时间戳
返回值
正数:秒级Unix时间戳
负数:代表发生了error
-1:key存在,没有设置过期时间
-2:key不存在
PEXPIRE
可用版本:>= 2.6.0
时间复杂度:O(1)
命令格式
PEXPIRE key milliseconds [NX|XX|GT|LT]
1
命令描述
与EXPIRE功能类似,不同点在于,PEXPIRE设置的生存时间单位是毫秒,而不是秒
可选参数
自Redis 7.0,PEXPIRE支持如下参数:
NX:只有当key没有设置过期时间,才会执行命令(已经设置过的,不能再设置)
XX :只有当key有过期时间,才会执行命令设置(没有设置过的,不能设置)
GT :只有当新的过期时间大于当前过期时间时,才会设置(只会增加过期时间)
LT :只有当新的过期时间大于当前过期时间时,才会设置(只会减少过期时间)
返回值
1:设置成功
0:设置失败
示例
127.0.0.1:6379> set mykey hello
OK
127.0.0.1:6379> pexpire mykey 100000
(integer) 1
127.0.0.1:6379> ttl mykey
(integer) 93
PEXPIREAT
可用版本:>= 2.6.0
时间复杂度:O(1)
命令格式
PEXPIREAT key milliseconds-timestamp [NX|XX|GT|LT]
命令描述
与EXPIREAT功能类似,不同点在于,PEXPIREAT设置的过期时间为Unix 毫秒 级时间戳,而不是秒级时间戳。
可选参数
自Redis 7.0,PEXPIREAT支持如下参数:
NX:只有当key没有设置过期时间,才会执行命令(已经设置过的,不能再设置)
XX :只有当key有过期时间,才会执行命令设置(没有设置过的,不能设置)
GT :只有当新的过期时间大于当前过期时间时,才会设置(只会增加过期时间)
LT :只有当新的过期时间大于当前过期时间时,才会设置(只会减少过期时间)
返回值
1:设置成功
0:设置失败
示例
127.0.0.1:6379> set mykey hello
OK
127.0.0.1:6379> pexpireat mykey 1632105572072
(integer) 1
127.0.0.1:6379> ttl mykey
(integer) 154
PEXPIRETIME
可用版本:>= 7.0.0
时间复杂度:O(1)
命令格式
EXPIRETIME key
命令描述
与PEXPIREAT对应,返回key过期的毫秒级Unix时间戳
返回值
正数:毫秒级Unix时间戳
负数:代表发生了error
-1:key存在,没有设置过期时间
-2:key不存在
TTL
可用版本:>= 1.0.0
时间复杂度:O(1)
命令格式
TTL key
命令描述
以秒为单位,返回 key 的剩余生存时间(TTL, time to live)。
返回值
正数:剩余生存时间(秒)
负数:代表发生了error
-1:key存在,没有设置过期时间
-2:key不存在
示例
127.0.0.1:6379> set mykey hello
OK
127.0.0.1:6379> ttl mykey
(integer) -1
127.0.0.1:6379> expire mykey 1000
(integer) 1
127.0.0.1:6379> ttl mykey
(integer) 992
PTTL
可用版本:>= 2.6.0
时间复杂度:O(1)
命令格式
PTTL key
命令描述
与 TTL 命令类似,不同点在于 PTTL 以 毫秒 为单位返回剩余生存时间。
返回值
正数:剩余生存时间(毫秒)
负数:代表发生了error
-1:key存在,没有设置过期时间
-2:key不存在
示例
127.0.0.1:6379> set mykey hello
OK
127.0.0.1:6379> pttl mykey
(integer) -1
127.0.0.1:6379> expire mykey 100
(integer) 1
127.0.0.1:6379> pttl mykey
(integer) 97767
PERSIST
可用版本:>= 2.2.0
时间复杂度:O(1)
命令格式
PERSIST key
1
命令描述
移除key的过期时间,使得key从易失的(有生存时间)变为持久的(永不过期)
返回值
1:移除成功
0:key不存在或者没有过期时间
示例
127.0.0.1:6379> set mykey htllo ex 1000
OK
127.0.0.1:6379> ttl mykey
(integer) 997
127.0.0.1:6379> persist mykey
(integer) 1
127.0.0.1:6379> ttl mykey
(integer) -1
总结
本文介绍了Redis 过期时间的相关操作,主要包括以下命令
EXPIRE、PEXPIRE:设置生存时间(秒、毫秒)
EXPIREAT、PEXPIREAT:设置具体时间点(Unix时间戳)
EXPIRETIME、PEXPIRETIME:查询过期的时间戳
TTL、PTTL:返回生存时间
PERSIST:持久化key