Redis 的过期策略与键的过期时间设置方法

 更新时间:2025年03月10日 09:09:37   作者:月落星还在  
Redis通过惰性删除和定期删除策略管理内存,提供多种命令设置键的过期时间,并通过过期字典高效处理过期键,合理设置过期时间、监控过期键数量和避免大量键同时过期是最佳实践,本文介绍Redis 的过期策略与键的过期时间设置,感兴趣的朋友一起看看吧

Redis 是一个高性能的键值存储系统,广泛应用于缓存、消息队列等场景。为了管理内存资源,Redis 提供了键的过期机制,允许用户为键设置生存时间(TTL)。本文将深入探讨 Redis 的过期策略、如何设置键的过期时间,以及这些机制背后的实现原理。

一、 Redis 的过期策略

Redis 通过两种主要策略来处理键的过期问题:​惰性删除和定期删除。

1.1 ​惰性删除(Lazy Expiration)​ ​

  • ​原理:当客户端访问一个键时,Redis 会检查该键是否已过期。如果已过期,则立即删除该键,并返回空值。
  • ​优点:只有在访问时才会触发删除操作,节省了 CPU 资源。
  • ​缺点:如果过期键长时间未被访问,会导致内存浪费。

1.2 ​定期删除(Active Expiration)​ ​

  • ​原理:Redis 会定期(默认每秒 10 次)随机检查一定数量的键,删除其中已过期的键。 ​
  • 优点:可以及时清理过期键,减少内存占用。
  • ​缺点:如果过期键数量过多,可能会占用一定的 CPU 资源。

1.3 ​过期策略的平衡

Redis 通过结合惰性删除和定期删除,实现了内存管理和性能的平衡。惰性删除确保只有在需要时才处理过期键,而定期删除则防止过期键长期占用内存。

二、如何设置键的过期时间

Redis 提供了多种命令来设置键的过期时间。

2.1 ​EXPIRE 命令

为键设置一个以秒为单位的生存时间。
语法:EXPIRE key seconds

SET mykey "Hello"
EXPIRE mykey 60  -- 60 秒后过期

2.2 ​PEXPIRE 命令

为键设置一个以毫秒为单位的生存时间。
语法:PEXPIRE key milliseconds
示例:

SET mykey "Hello"
PEXPIRE mykey 60000  -- 60000 毫秒(60 秒)后过期

2.3 ​EXPIREAT 命令

为键设置一个以 Unix 时间戳(秒)为单位的过期时间。
语法:EXPIREAT key timestamp
示例:
redis
SET mykey “Hello”
EXPIREAT mykey 1672502400 – 2023-01-01 00:00:00 过期

2.4 ​PEXPIREAT 命令

为键设置一个以 Unix 时间戳(毫秒)为单位的过期时间。
语法:PEXPIREAT key timestamp
示例:

SET mykey "Hello"
PEXPIREAT mykey 1672502400000  -- 2023-01-01 00:00:00 过期

2.5 ​TTL 和 PTTL 命令

TTL:返回键的剩余生存时间(秒)。
PTTL:返回键的剩余生存时间(毫秒)。

示例:

TTL mykey  -- 返回剩余秒数
PTTL mykey -- 返回剩余毫秒数

2.6 ​PERSIST 命令

移除键的过期时间,使其永久有效。
语法:PERSIST key
示例:

PERSIST mykey  -- 移除 mykey 的过期时间

三、 过期机制的实现原理

Redis 的过期机制基于以下数据结构实现:

3.1 ​过期字典(Expires Dictionary)​

  • Redis 使用一个独立的字典(哈希表)来存储所有键的过期时间。
  • 键是数据库中的键,值是对应的过期时间戳。

3.2 ​过期键的删除

  • 惰性删除:当访问键时,Redis 会检查过期字典,如果当前时间大于过期时间,则删除该键。 ​
  • 定期删除:Redis会定期随机检查一定数量的键,删除其中已过期的键。

3.3 ​内存回收

当 Redis 的内存使用达到上限时,会触发内存回收机制(如 maxmemory-policy 配置),优先删除过期键以释放内存。

四、 最佳实践

4.1 ​合理设置过期时间

  • 根据业务需求设置合理的过期时间,避免键过早或过晚过期。
  • 对于缓存场景,可以使用较短的过期时间(如几分钟或几小时)。

4.2 ​监控过期键数量

使用 INFO 命令监控 Redis 中的过期键数量,确保内存资源得到有效管理。

INFO keyspace

4.3 ​避免大量键同时过期

如果大量键在同一时间过期,可能会导致 Redis 性能下降。可以通过随机化过期时间来缓解这一问题。

4.4 ​使用 maxmemory-policy 配置

配置 Redis 的内存回收策略,优先删除过期键或最近最少使用的键(LRU)。

CONFIG SET maxmemory-policy volatile-lru

五、总结

Redis 的过期机制通过惰性删除和定期删除两种策略,实现了内存资源的高效管理。通过合理设置键的过期时间,可以优化 Redis 的性能和内存使用。同时,了解过期机制的实现原理,有助于更好地应对高并发和大数据量的场景。

在实际应用中,建议根据业务需求灵活使用 Redis 的过期命令,并结合监控工具和配置优化,确保 Redis 的稳定性和高效性。

参考资料

Redis 官方文档:https://redis.io/commands#expire
《Redis 设计与实现》——黄健宏
希望这篇博文能帮助你更好地理解 Redis 的过期策略与键的过期时间设置!如果有任何问题或建议,欢迎留言讨论。

到此这篇关于Redis 的过期策略与键的过期时间设置的文章就介绍到这了,更多相关Redis过期策略内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Redis实现优惠券限一单限制详解

    Redis实现优惠券限一单限制详解

    这篇文章主要介绍了Redis解决优惠券秒杀应用案例,本文先讲了抢购问题,指出其中会出现的多线程问题,提出解决方案采用悲观锁和乐观锁两种方式进行实现,然后发现在抢购过程中容易出现一人多单现象,需要的朋友可以参考下
    2022-12-12
  • Redis存储断点续传文件状态的最佳实践

    Redis存储断点续传文件状态的最佳实践

    在断点续传系统中,如何高效地存储和更新文件上传状态是关键,得益于 Redis 高效的内存操作和多种数据结构的支持,它非常适合用于存储上传过程中的临时状态信息,下面,我们将探讨如何利用 Redis 实现文件上传状态的存储,需要的朋友可以参考下
    2024-12-12
  • Redis的数据过期清除策略实现

    Redis的数据过期清除策略实现

    Redis实现了数据过期清除策略,本文将深入解析Redis的数据过期清除策略,包括过期键的删除方式、清除策略的选择以及相关配置参数的介绍,感兴趣的可以了解一下
    2024-05-05
  • 利用redisson快速实现自定义限流注解(接口防刷)

    利用redisson快速实现自定义限流注解(接口防刷)

    利用redis的有序集合即Sorted Set数据结构,构造一个令牌桶来实施限流,而redisson已经帮我们封装成了RRateLimiter,通过redisson,即可快速实现我们的目标,这篇文章主要介绍了利用redisson快速实现自定义限流注解,需要的朋友可以参考下
    2024-07-07
  • redis实现简单分布式锁

    redis实现简单分布式锁

    这篇文章主要介绍了redis实现简单分布式锁,文中通过代码示例讲解的非常详细,需要的朋友可以参考下
    2013-09-09
  • 解决Redis启动警告问题

    解决Redis启动警告问题

    这篇文章介绍了解决Redis启动警告问题的方法,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-02-02
  • Redis三种集群搭建配置(主从集群、哨兵集群、分片集群)

    Redis三种集群搭建配置(主从集群、哨兵集群、分片集群)

    本文主要介绍了Redis三种集群搭建配置,包括主从集群、哨兵集群、分片集群,具有一定的参考价值,感兴趣的可以了解一下
    2024-03-03
  • 浅谈一下如何保证Redis缓存与数据库的一致性

    浅谈一下如何保证Redis缓存与数据库的一致性

    这篇文章主要介绍了一下如何保证Redis缓存与数据库的一致性,今天这篇文章就带你详细了解一下四种同步策略,需要的朋友可以参考下
    2023-03-03
  • Redis可视化客户端小结

    Redis可视化客户端小结

    因为 Redis 官方只提供了命令行版的 Redis 客户端 redis-cli,以至于我们在使用的时候会比较麻烦,而且命令行版的客户端看起来也不够直观,下面是我这些年使用过的一些 Redis 可视化客户端,分享给大家
    2021-06-06
  • Redis底层类型之json命令使用

    Redis底层类型之json命令使用

    这篇文章主要为大家介绍了Redis底层类型之json命令使用详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-09-09

最新评论