Redis 如何设置过期时间,你学会了吗?

你必须非常努力,才能看起来毫不费力!

微信搜索公众号[ 漫漫Coding路 ],一起From Zero To Hero !

前言

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

EXPIRE

可用版本:>= 1.0.0

时间复杂度:O(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:设置失败

示例

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]

命令描述

  • 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

命令描述

  • 移除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

更多

个人博客: https://lifelmy.github.io/

微信公众号:漫漫Coding路

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值