前言

本篇文章我们来学习下Redis 过期时间的相关命令!

EXPIRE

可用版本:>= 1.0.0

时间复杂度:O(1)

命令格式

1
EXPIRE key seconds [NX|XX|GT|LT]

命令描述

  • 给key设定一个存活时间(单位为秒),当key过期后会被删除;
  • 对一个已经带有生存时间的 key 执行 EXPIRE 命令,新指定的生存时间会取代旧的生存时间。
  • 使用DEL删除一个key后,对应的过期时间也会被删除;
  • 使用SETGETSET等保存命令时,过期时间会被覆盖;
  • 对于其它命令,如果只是修改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:设置失败

示例

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
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)

命令格式

1
EXPIREAT key timestamp [NX|XX|GT|LT]

命令描述

  • EXPIRE功能类似,不同点在于,EXPIREAT设置的过期时间为Unix秒级时间戳,而不是生存秒数。

可选参数

自Redis 7.0,EXPIREAT支持如下参数:

  • NX:只有当key没有设置过期时间,才会执行命令(已经设置过的,不能再设置)
  • XX :只有当key有过期时间,才会执行命令设置(没有设置过的,不能设置)
  • GT :只有当新的过期时间大于当前过期时间时,才会设置(只会增加过期时间)
  • LT :只有当新的过期时间大于当前过期时间时,才会设置(只会减少过期时间)

返回值

1:设置成功

0:设置失败

示例

1
2
3
4
5
6
7
8
9
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)

命令格式

1
EXPIRETIME key

命令描述

  • EXPIREAT对应,返回key过期的秒级Unix时间戳

返回值

  • 正数:秒级Unix时间戳
  • 负数:代表发生了error
    • -1:key存在,没有设置过期时间
    • -2:key不存在

PEXPIRE

可用版本:>= 2.6.0

时间复杂度:O(1)

命令格式

1
PEXPIRE key milliseconds [NX|XX|GT|LT]

命令描述

  • EXPIRE功能类似,不同点在于,PEXPIRE设置的生存时间单位是毫秒,而不是

可选参数

自Redis 7.0,PEXPIRE支持如下参数:

  • NX:只有当key没有设置过期时间,才会执行命令(已经设置过的,不能再设置)
  • XX :只有当key有过期时间,才会执行命令设置(没有设置过的,不能设置)
  • GT :只有当新的过期时间大于当前过期时间时,才会设置(只会增加过期时间)
  • LT :只有当新的过期时间大于当前过期时间时,才会设置(只会减少过期时间)

返回值

1:设置成功

0:设置失败

示例

1
2
3
4
5
6
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)

命令格式

1
PEXPIREAT key milliseconds-timestamp [NX|XX|GT|LT]

命令描述

  • EXPIREAT功能类似,不同点在于,PEXPIREAT设置的过期时间为Unix 毫秒 级时间戳,而不是秒级时间戳。

可选参数

自Redis 7.0,PEXPIREAT支持如下参数:

  • NX:只有当key没有设置过期时间,才会执行命令(已经设置过的,不能再设置)
  • XX :只有当key有过期时间,才会执行命令设置(没有设置过的,不能设置)
  • GT :只有当新的过期时间大于当前过期时间时,才会设置(只会增加过期时间)
  • LT :只有当新的过期时间大于当前过期时间时,才会设置(只会减少过期时间)

返回值

1:设置成功

0:设置失败

示例

1
2
3
4
5
6
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)

命令格式

1
EXPIRETIME key

命令描述

  • PEXPIREAT对应,返回key过期的毫秒级Unix时间戳

返回值

  • 正数:毫秒级Unix时间戳
  • 负数:代表发生了error
    • -1:key存在,没有设置过期时间
    • -2:key不存在

TTL

可用版本:>= 1.0.0

时间复杂度:O(1)

命令格式

1
TTL key

命令描述

  • 以秒为单位,返回 key 的剩余生存时间(TTL, time to live)。

返回值

  • 正数:剩余生存时间(秒)
  • 负数:代表发生了error
    • -1:key存在,没有设置过期时间
    • -2:key不存在

示例

1
2
3
4
5
6
7
8
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)

命令格式

1
PTTL key

命令描述

  • TTL 命令类似,不同点在于 PTTL毫秒 为单位返回剩余生存时间。

返回值

  • 正数:剩余生存时间(毫秒)
  • 负数:代表发生了error
    • -1:key存在,没有设置过期时间
    • -2:key不存在

示例

1
2
3
4
5
6
7
8
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)

命令格式

1
PERSIST key

命令描述

  • 移除key的过期时间,使得key从易失的(有生存时间)变为持久的(永不过期)

返回值

  • 1:移除成功
  • 0:key不存在或者没有过期时间

示例

1
2
3
4
5
6
7
8
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

更多

微信公众号:CodePlayer