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


    目录
  • 一、 Redis 的过期策略
    • 1.1 ?惰性删除(Lazy Expiration)? ?
    • 1.2 ?定期删除(Active Expiration)? ?
    • 1.3 ?过期策略的平衡
  • 二、如何设置键的过期时间
    • 2.1 ?EXPIRE 命令
    • 2.2 ?PEXPIRE 命令
    • 2.3 ?EXPIREAT 命令
    • 2.4 ?PEXPIREAT 命令
    • 2.5 ?TTL 和 PTTL 命令
    • 2.6 ?PERSIST 命令
  • 三、 过期机制的实现原理
    • 3.1 ?过期字典(Expires Dictionary)?
    • 3.2 ?过期键的删除
    • 3.3 ?内存回收
  • 四、 最佳实践
    • 4.1 ?合理设置过期时间
    • 4.2 ?监控过期键数量
    • 4.3 ?避免大量键同时过期
    • 4.4 ?使用 maxmemory-policy 配置
  • 五、总结
  • 参考资料

    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过期策略内容请搜索电脑手机教程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持电脑手机教程网!