当前位置: 首页 > web >正文

Redis 设置过期时间

Redis 设置过期时间

在 Redis 中,我们可以为键(key)设置过期时间,以确保当指定的时间到达后,该键会自动被删除。这种机制对于需要临时存储数据的应用场景非常有用,例如缓存、会话管理等。

1. 基本概念
  • 过期时间:指一个键在 Redis 中存在的有效时间,超过这个时间后,Redis 会自动删除该键以释放内存。
  • 生存时间(TTL):表示键剩余的存活时间,可以通过命令获取和设置。
2. 设置过期时间的方法

Redis 提供了多种命令用于设置或修改键的过期时间。以下是一些常用的命令:

a. EXPIRE key seconds
  • 功能:为指定的键设置过期时间,单位是秒。
  • 返回值
    • 如果成功设置了过期时间,返回 1
    • 如果键不存在,返回 0

示例:

redis> EXPIRE mykey 60
(integer) 1

此命令设置键 mykey 在 60 秒后过期。

b. PXPIRE key milliseconds
  • 功能:为指定的键设置以毫秒为单位的过期时间。
  • 返回值
    • 如果成功设置了过期时间,返回 1
    • 如果键不存在,返回 0

示例:

redis> PXPIRE mykey 5000
(integer) 1

此命令设置键 mykey 在 5000 毫秒(即 5 秒)后过期。

c. EXPIREAT key timestamp
  • 功能:为指定的键设置一个具体的过期时间,使用 Unix 时间戳(从 epoch 开始计算的秒数)。
  • 返回值
    • 如果成功设置了过期时间,返回 1
    • 如果键不存在,返回 0

示例:

redis> EXPIREAT mykey 1623859200
(integer) 1

此命令设置键 mykey 在 Unix 时间戳 1623859200(即 2021 年 6 月 14 日 00:00:00 UTC)过期。

d. PEXPIREAT key timestamp milliseconds
  • 功能:与 EXPIREAT 类似,但时间戳使用毫秒精度。
  • 返回值
    • 如果成功设置了过期时间,返回 1
    • 如果键不存在,返回 0

示例:

redis> PEXPIREAT mykey 1623859200000
(integer) 1

此命令设置键 mykey 在 Unix 时间戳 1623859200000(即 2021 年 6 月 14 日 00:00:00 UTC,毫秒精度)过期。

e. 使用 SET 命令设置过期时间
  • Redis 的 SET 命令支持在设置键值的同时指定过期时间。可以使用选项 EX(以秒为单位)或 PX(以毫秒为单位)来实现这一点。

示例:

redis> SET mykey "hello" EX 60
OKredis> SET mykey2 "world" PX 5000
OK
  • 第一个命令设置键 mykey 的值为 "hello",并在 60 秒后过期。
  • 第二个命令设置键 mykey2 的值为 "world",并在 5000 毫秒(即 5 秒)后过期。
3. 获取和修改 TTL
a. TTL key
  • 功能:返回指定键的剩余生存时间(以秒为单位)。
  • 返回值
    • 如果键存在并且有设置过期时间,返回剩余的秒数。
    • 如果键不存在,返回 -2
    • 如果键存在但没有设置过期时间,返回 -1

示例:

redis> SET mykey "test" EX 60
OKredis> TTL mykey
(integer) 58redis> TTL nonexistkey
(integer) -2redis> TTL noexpirekey
(integer) -1
b. PTTL key
  • 功能:与 TTL 类似,但返回的是以毫秒为单位的剩余生存时间。
  • 返回值
    • 如果键存在并且有设置过期时间,返回剩余的毫秒数。
    • 如果键不存在,返回 -2
    • 如果键存在但没有设置过期时间,返回 -1

示例:

redis> SET mykey "test" PX 5000
OKredis> PTTL mykey
(integer) 4837
c. 修改 TTL
  • 可以通过 EXPIRE, PXPIRE, EXPIREAT, 或 PEXPIREAT 命令重新设置过期时间,从而修改键的剩余生存时间。

示例:

redis> SET mykey "test" EX 60
OKredis> TTL mykey
(integer) 58redis> EXPIRE mykey 30
(integer) 1redis> TTL mykey
(integer) 29
4. 过期键的删除策略

Redis 使用两种策略来处理过期的键:

a. 惰性删除(Lazy Deletion)
  • 过期的键不会立即被删除,而是在下一次访问该键时进行检查。如果发现键已过期,则会自动删除它。
  • 优点:减少了内存资源的消耗和 CPU 的使用率,因为不需要频繁扫描和删除过期键。
b. 积极删除(Active Deletion)
  • Redis 定期主动扫描数据库,寻找已经过期的键并删除它们。这种策略有助于避免过多的过期键堆积在内存中。
  • 优点:能够更及时地释放内存空间,保持较高的性能和稳定性。
5. 批量设置过期时间

在需要为多个键设置过期时间时,可以使用 Redis 的 MULTIEXEC 命令将多个命令打包执行,从而实现原子性操作。

示例:

redis> MULTI
OKredis> EXPIRE key1 60
QUEUEDredis> EXPIRE key2 30
QUEUEDredis> EXEC
1) OK
2) OK
6. 注意事项
  • 过期时间的精度:使用 PXPEXPIREAT 命令时,时间以毫秒为单位,可以提供更高的精度。
  • 时间戳的选择:在使用 EXPIREATPEXPIREAT 时,需要确保提供的 Unix 时间戳是正确的,并且与当前的系统时间一致。
  • 内存和性能的影响:过多设置过期键可能会增加 Redis 的负载,特别是在高并发的情况下。因此,建议合理规划过期时间和 TTL 值,以优化资源使用。
7. 总结

通过上述命令和策略,可以在 Redis 中灵活地设置、获取和修改键的生存时间(TTL)。这不仅有助于管理内存资源,还能提高应用的性能和稳定性。在实际应用中,应根据具体的业务需求选择合适的过期时间和策略,以实现最佳的效果。

8. 相关链接
  • Redis 官方文档 - TTL
  • Redis 官方文档 - EXPIRE
  • Redis 官方文档 - PEXPIRE

通过以上内容,您可以全面了解如何在 Redis 中设置和管理键的生存时间。

http://www.xdnf.cn/news/1243.html

相关文章:

  • 仓储物流管理系统开发:提升企业供应链效率的关键技术
  • SQLMesh隔离系统深度实践指南:动态模式映射与跨环境计算复用
  • TikTok X-Gnarly纯算分享
  • IO流详解
  • 监控网络状态
  • windows磁盘扩展分区
  • 110. 平衡二叉树
  • 初识网络原理
  • Linux与Anaconda环境部署与管理(运维交接)
  • 2023蓝帽杯初赛内存取证-6
  • 方案精读:华为智慧园区解决方案【附全文阅读】
  • 再见 Smartdaili,你好 Decodo!
  • 解释instanceof
  • 营收持续增长,恩威医药价值重估再现
  • 【信息安全工程师备考笔记】第二章 网络信息安全概述
  • 典籍知识问答典籍查询界面前端界面设计效果实现
  • MySQL:如何用关系型数据库征服NoSQL核心战场?
  • 【STL】unordered_map
  • iptables
  • MYOJ_7443《洛谷 U556408 》【模板】二叉树基础训练 (自己上传的题,想上主题库qwq)(二叉树基础操作模板)
  • 【c语言】指针和数组笔试题解析
  • 科研小白可以做哪些准备
  • 推公式——耍杂技的牛
  • 每日OJ_牛客_AOE还是单体?_贪心_C++_Java
  • MyBatis 和 MyBatis-Plus 在 Spring Boot 中的配置、功能对比及 SQL 日志输出的详细说明,重点对比日志输出的配置差异
  • 如何使用 Spring Boot 实现统一功能处理:从零开始打造高效、可扩展的后台系统
  • Feign 深度解析:Java 声明式 HTTP 客户端的终极指南
  • 乐视系列玩机---乐视1s x500 x501 x502等系列线刷救砖以及刷写第三方twrp 卡刷第三方固件步骤解析
  • 纽约大学具身智能体在城市空间中的视觉导航之旅!CityWalker:从海量网络视频中学习城市导航
  • 第六章 QT基础:1、入门操作:文件操作与信号槽机制笔记