一、概述
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 系统的稳定性。
标签:缓存,策略,删除,过期,Redis,内存 From: https://www.cnblogs.com/Oct16/p/18496125