从 01 开始 从 01 开始
首页
  • 📚 计算机基础

    • 计算机简史
    • 数字电路
    • 计算机组成原理
    • 操作系统
    • Linux
    • 计算机网络
    • 数据库
    • 编程工具
    • 装机
  • 🎨 前端

    • Node
  • JavaSE
  • Java 高级
  • JavaEE

    • 构建、依赖管理
    • Ant
    • Maven
    • 日志框架
    • Junit
    • JDBC
    • XML-JSON
  • JavaWeb

    • 服务器软件
    • 环境管理和配置管理-科普篇
    • Servlet
  • Spring

    • Spring基础
  • 主流框架

    • Redis
    • Mybatis
    • Lucene
    • Elasticsearch
    • RabbitMQ
    • MyCat
    • Lombok
  • SpringMVC

    • SpringMVC 基础
  • SpringBoot

    • SpringBoot 基础
  • Windows 使用技巧
  • 手机相关技巧
  • 最全面的输入法教程
  • 最全面的浏览器教程
  • Office
  • 图片类工具
  • 效率类工具
  • 最全面的 RSS 教程
  • 码字工具
  • 各大平台
  • 校招
  • 五险一金
  • 职场规划
  • 关于离职
  • 杂谈
  • 自媒体
  • 📖 读书

    • 读书工具
    • 走进科学
  • 🌍 英语

    • 从零开始学英语
    • 英语兔的相关视频
    • Larry 想做技术大佬的相关视频
  • 🏛️ 政治

    • 反腐
    • GFW
    • 404 内容
    • 审查与自我审查
    • 互联网
    • 战争
    • 读书笔记
  • 💰 经济

    • 关于税
    • 理财
  • 💪 健身

    • 睡眠
    • 皮肤
    • 口腔健康
    • 学会呼吸
    • 健身日志
  • 🏠 其他

    • 驾驶技能
    • 租房与买房
    • 厨艺
  • 电影

    • 电影推荐
  • 电视剧
  • 漫画

    • 漫画软件
    • 漫画推荐
  • 游戏

    • Steam
    • 三国杀
    • 求生之路
  • 小说
  • 关于本站
  • 关于博主
  • 打赏
  • 网站动态
  • 友人帐
  • 从零开始搭建博客
  • 搭建邮件服务器
  • 本站分享
  • 🌈 生活

    • 2022
    • 2023
    • 2024
    • 2025
  • 📇 文章索引

    • 文章分类
    • 文章归档

晓林

程序猿,自由职业者,博主,英语爱好者,健身达人
首页
  • 📚 计算机基础

    • 计算机简史
    • 数字电路
    • 计算机组成原理
    • 操作系统
    • Linux
    • 计算机网络
    • 数据库
    • 编程工具
    • 装机
  • 🎨 前端

    • Node
  • JavaSE
  • Java 高级
  • JavaEE

    • 构建、依赖管理
    • Ant
    • Maven
    • 日志框架
    • Junit
    • JDBC
    • XML-JSON
  • JavaWeb

    • 服务器软件
    • 环境管理和配置管理-科普篇
    • Servlet
  • Spring

    • Spring基础
  • 主流框架

    • Redis
    • Mybatis
    • Lucene
    • Elasticsearch
    • RabbitMQ
    • MyCat
    • Lombok
  • SpringMVC

    • SpringMVC 基础
  • SpringBoot

    • SpringBoot 基础
  • Windows 使用技巧
  • 手机相关技巧
  • 最全面的输入法教程
  • 最全面的浏览器教程
  • Office
  • 图片类工具
  • 效率类工具
  • 最全面的 RSS 教程
  • 码字工具
  • 各大平台
  • 校招
  • 五险一金
  • 职场规划
  • 关于离职
  • 杂谈
  • 自媒体
  • 📖 读书

    • 读书工具
    • 走进科学
  • 🌍 英语

    • 从零开始学英语
    • 英语兔的相关视频
    • Larry 想做技术大佬的相关视频
  • 🏛️ 政治

    • 反腐
    • GFW
    • 404 内容
    • 审查与自我审查
    • 互联网
    • 战争
    • 读书笔记
  • 💰 经济

    • 关于税
    • 理财
  • 💪 健身

    • 睡眠
    • 皮肤
    • 口腔健康
    • 学会呼吸
    • 健身日志
  • 🏠 其他

    • 驾驶技能
    • 租房与买房
    • 厨艺
  • 电影

    • 电影推荐
  • 电视剧
  • 漫画

    • 漫画软件
    • 漫画推荐
  • 游戏

    • Steam
    • 三国杀
    • 求生之路
  • 小说
  • 关于本站
  • 关于博主
  • 打赏
  • 网站动态
  • 友人帐
  • 从零开始搭建博客
  • 搭建邮件服务器
  • 本站分享
  • 🌈 生活

    • 2022
    • 2023
    • 2024
    • 2025
  • 📇 文章索引

    • 文章分类
    • 文章归档
  • 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 小实验
    • Mybatis

    • Lucene

    • Elasticsearch

    • MQ

    • MyCat

    • Lombok

  • SpringMVC

  • SpringBoot

  • 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 命令以毫秒为单位返回键的剩余时间。 ‍

上次更新: 2025/6/3 09:31:54
Redis 中的事务
Redis 持久化数据

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

最近更新
01
语雀文档一键下载至本地教程
07-04
02
要成功,就不要低估环境对你的影响
07-03
03
血泪教训:电子设备要定期开机
07-02
更多文章>
Theme by Vdoing | Copyright © 2022-2025 | 粤 ICP 备 2022067627 号 -1 | 粤公网安备 44011302003646 号 | 点击查看十年之约
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式