从01开始 从01开始
首页
  • 计算机科学导论
  • 数字电路
  • 计算机组成原理

    • 计算机组成原理-北大网课
  • 操作系统
  • Linux
  • Docker
  • 计算机网络
  • 计算机常识
  • Git
  • JavaSE
  • Java高级
  • JavaEE

    • Ant
    • Maven
    • Log4j
    • Junit
    • JDBC
    • XML-JSON
  • JavaWeb

    • 服务器软件
    • Servlet
  • Spring
  • 主流框架

    • Redis
    • Mybatis
    • Lucene
    • Elasticsearch
    • RabbitMQ
    • MyCat
    • Lombok
  • SpringMVC
  • SpringBoot
  • 学习网课的心得
  • 输入法
  • 节假日TodoList
  • 其他
  • 关于本站
  • 网站日记
  • 友人帐
  • 如何搭建一个博客
GitHub (opens new window)

peterjxl

人生如逆旅,我亦是行人
首页
  • 计算机科学导论
  • 数字电路
  • 计算机组成原理

    • 计算机组成原理-北大网课
  • 操作系统
  • Linux
  • Docker
  • 计算机网络
  • 计算机常识
  • Git
  • JavaSE
  • Java高级
  • JavaEE

    • Ant
    • Maven
    • Log4j
    • Junit
    • JDBC
    • XML-JSON
  • JavaWeb

    • 服务器软件
    • Servlet
  • Spring
  • 主流框架

    • Redis
    • Mybatis
    • Lucene
    • Elasticsearch
    • RabbitMQ
    • MyCat
    • Lombok
  • SpringMVC
  • SpringBoot
  • 学习网课的心得
  • 输入法
  • 节假日TodoList
  • 其他
  • 关于本站
  • 网站日记
  • 友人帐
  • 如何搭建一个博客
GitHub (opens new window)
  • JavaSE

  • JavaSenior

  • JavaEE

  • JavaWeb

  • Spring

  • 主流框架

    • Redis

      • Redis系列教程介绍
      • Redis介绍
      • Redis的安装和启停
      • Redis操作数据
      • Redis客户端
      • Redis命令返回值
      • 多数据库
      • Redis中的事务
      • Redis中key的过期时间
        • EXPIRE命令
        • TTL命令
        • PERSIST命令
        • PEXPIRE命令、PTTL命令
      • Redis持久化数据
      • Redis的配置
      • Java连接Redis
      • Redis连接池
      • Redis搭建集群
      • Redis中的哨兵
      • Redis中的安全
      • 监控Redis
      • Redis小实验
      • Redis
    • Mybatis

    • Lucene

    • Elasticsearch

    • MQ

    • MyCat

    • Lombok

    • 主流框架
  • SpringMVC

  • SpringBoot

  • Java并发

  • Java源码

  • JVM

  • 韩顺平

  • Java
  • Java
  • 主流框架
  • Redis
2023-08-18
目录

Redis中key的过期时间

# 70.Redis中key的过期时间

在实际的开发中经常会遇到一些有时效的数据,比如限时优惠活动、缓存或验证码等,过了一定的时间就需要删除这些数据。在关系数据库中一般需要额外的一个字段记录到期时间,然后定期检测删除过期数据。   ‍

# EXPIRE命令

在Redis中可以使用 EXPIRE命令设置一个键的过期时间,到时间后Redis会自动删除它。

EXPIRE 命令的使用方法为 EXPIRE key seconds​​,其中 seconds 参数表示键的过期时间,单位是秒。如要想让session:29e3d​键在15分钟后被删除:

redis> SET session:29e3d uid1314
OK

redis> EXPIRE session:29e3d 900
(integer) 1
1
2
3
4
5

EXPIRE命令返回1表示设置成功,返回0则表示键不存在或设置失败。

‍

‍

# TTL命令

如果想知道一个键还有多久的时间会被删除,可以使用TTL命令。返回值是键的剩余时间(单位是秒):

redis> SET foo bar
OK

redis> EXPIRE foo 20
(integer) 1

redis> TTL foo
(integer) 15

redis> TTL foo
(integer) 7

redis> TTL foo
(integer) –2
1
2
3
4
5
6
7
8
9
10
11
12
13
14

可见随着时间的不同,foo键的过期时间逐渐减少,20秒后foo键会被删除。当键不存在时TTL命令会返回−2。

‍

‍

那么没有为键设置过期时间(即永久存在,这是建立一个键后的默认情况)的情况下会返回什么呢?答案是返回−1:

redis> SET persistKey value
OK

redis> TTL persistKey
(integer) –1
1
2
3
4
5

‍

# PERSIST命令

如果想取消键的过期时间设置(即将键恢复成永久的),则可以使用PERSIST命令。如果过期时间被成功清除则返回1;否则返回0(因为键不存在或键本来就是永久的):

redis> SET foo bar
OK

redis> EXPIRE foo 20
(integer) 1

redis> PERSIST foo
(integer) 1

redis> TTL foo
(integer) –1
1
2
3
4
5
6
7
8
9
10
11

‍

‍

除了PERSIST命令之外,使用SET或GETSET命令为键赋值也会同时清除键的过期时间,例如:

redis> EXPIRE foo 20
(integer) 1

redis> SET foo bar
OK

redis> TTL foo
(integer) –1
1
2
3
4
5
6
7
8

‍

使用EXPIRE命令会重新设置键的过期时间,就像这样:

redis> SET foo bar
OK

redis> EXPIRE foo 20
(integer) 1

redis> TTL foo
(integer) 15

redis> EXPIRE foo 20
(integer) 1

redis> TTL foo
(integer) 17
1
2
3
4
5
6
7
8
9
10
11
12
13
14

‍

其他只对键值进行操作的命令(如INCR、LPUSH、HSET、ZREM)均不会影响键的过期时间。

‍

# PEXPIRE命令、PTTL命令

EXPIRE命令的seconds参数必须是整数,所以最小单位是1秒。

如果想要更精确的控制键的过期时间应该使用 PEXPIRE命令,PEXPIRE命令与 EXPIRE的唯一区别是前者的时间单位是毫秒,即 PEXPIRE key 1000 与 EXPIRE key 1 等价。对应地可以用 PTTL命令以毫秒为单位返回键的剩余时间。

‍

‍

‍

‍

在GitHub上编辑此页 (opens new window)
上次更新: 2023/8/18 22:11:52
Redis中的事务
Redis持久化数据

← Redis中的事务 Redis持久化数据→

Theme by Vdoing | Copyright © 2022-2023 粤ICP备2022067627号-1 粤公网安备 44011302003646号
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式