Redis过期策略

一、概述

Redis的过期策略主要是用来管理带有过期时间的键,以确保内存能够得到高效利用,并避免保存不再需要的数据。

这种设计既能减少不必要的内存占用,又能提高系统的整体性能。

二、实现方式

过期策略有两种主要实现方式:

1、惰性删除 (Lazy Deletion)

  • Redis 只有在访问键时才会检查其是否已经过期。如果该键已经过期,则会在访问时删除它。
  • 优点:惰性删除不会占用额外的 CPU 资源进行检查,只在键被访问时才进行处理。
  • 缺点:如果键从未被访问,过期的数据将一直保留在内存中,导致内存浪费。

2. 定期删除(Periodic Deletion)

  • Redis 会定期随机抽取一部分带有过期时间的键进行检查,并删除已经过期的键。这个操作默认每秒执行 10 次。
  • 可以通过配置文件 hz 参数来调整检查频率,增大频率会更积极地清理过期键,但也会增加 CPU 的负载。
  • 优点:这种方式可以在后台清理一些过期数据,减少内存浪费。
  • 缺点:由于是抽样检查,可能会遗漏部分过期键,尤其是在过期键数量较多的情况下。

三、Redis过期策略配置

Redis 提供了一些参数来控制过期策略的行为,例如 maxmemory-policy 用于指定当达到最大内存时的缓存淘汰策略,而 hz 参数则控制定期删除的检查频率。

可以在 redis.conf 文件中设置:

hz 10  # 设置每秒检查的频率

四、Redis过期策略和Redis缓存淘汰策略区别

二者区别可以从两个方面来看:

1、核心关注点

  • 过期策略:专注于管理带有过期时间的键。它确保这些键在过期后能被及时删除,但并不能保证内存始终有足够空间。若达到最大内存限制,依然可能出现内存满的情况。
  • 缓存淘汰策略:在内存满时负责管理内存空间,决定哪些数据应被删除,以腾出空间给新数据。

2、内存管理的主动性

  • 主动删除:过期策略属于主动删除。这里”主动“指的是Redis会主动检查和删除过期的键。
  • 被动删除:缓存淘汰策略属于被动删除。这里”被动“指的是Redis达到最大内存限制时,它会被动地根据配置的淘汰策略删除某些键 。此时的缓存淘汰是为了解决内存不足问题。

总结: 在实际应用中,这两种策略是相辅相成的。过期策略可以帮助管理动态数据的生命周期,而缓存淘汰策略则在内存紧张时发挥作用,确保 Redis 系统的稳定性。

posted on 2024-10-23 12:41  春与青溪长  阅读(231)  评论(0编辑  收藏  举报