【redis】redis内存管理,过期策略与淘汰策略

一:Redis 的过期删除策略及处理流程如下:

1. 过期删除策略

Redis 通过以下两种策略删除过期键:

1.1 惰性删除
  • 触发时机:当客户端访问某个键时,Redis 会检查该键是否过期。
  • 执行流程 :
    1. 客户端请求访问键。
    2. Redis 检查键的过期时间。
    3. 如果键已过期,Redis 删除该键并返回空;如果未过期,返回键值。
1.2 定期删除
  • 触发时机:Redis 定期随机抽取部分键检查是否过期。
  • 执行流程 :
    1. Redis 从设置了过期时间的键中随机抽取一部分。
    2. 检查这些键是否过期。
    3. 删除已过期的键。
    4. 如果过期键比例超过一定阈值,重复该过程。

2. 处理流程

Redis 处理过期键的流程结合了惰性删除和定期删除:

  1. 客户端访问:

    • 客户端请求访问键时,Redis 先检查键是否过期,若过期则删除并返回空。
  2. 定期检查:

    • Redis 定期随机抽取部分键检查过期情况,删除已过期的键。
    • 如果过期键比例较高,继续检查更多键。
  3. 内存回收:

    • 通过惰性删除和定期删除,Redis 逐步回收过期键占用的内存。

3. 配置参数

  • hz:控制定期删除的频率,默认 10,表示每秒执行 10 次检查。
  • maxmemory-samples:设置每次检查时随机抽取的键数量,默认 5。

4. 总结

  • 惰性删除:在访问时检查并删除过期键。
  • 定期删除:定期随机检查并删除过期键。

这两种策略共同确保 Redis 高效管理内存,避免过期键占用过多资源。

在 Redis 中,缓存淘汰策略 和 过期策略 是两种不同的机制,但它们共同作用于缓存数据的管理。以下是对 LRU 和 LFU 缓存淘汰策略的区别,以及它们与过期策略的应用场景的详细解读。


二、缓存淘汰策略:LRU 和 LFU 的区别

1. LRU(Least Recently Used,最近最少使用)

  • 原理:优先淘汰最近最少被访问的数据。
  • 实现方式:Redis 使用近似 LRU 算法,通过随机采样一部分键,从中淘汰最近最少使用的键。
  • 特点 :
    • 关注数据的访问时间。
    • 适合访问模式有明显热点数据的场景。
  • 适用场景 :
    • 热点数据缓存(如新闻、社交媒体热门内容)。
    • 需要保留最近访问数据的场景。

2. LFU(Least Frequently Used,最不常用)

  • 原理:优先淘汰访问频率最低的数据。
  • 实现方式:Redis 记录每个键的访问频率,淘汰访问次数最少的键。
  • 特点 :
    • 关注数据的访问频率。
    • 适合访问模式较为均匀的场景。
  • 适用场景 :
    • 访问频率差异较大的场景(如推荐系统、广告系统)。
    • 需要保留高频访问数据的场景。

3. LRU 和 LFU 的区别

特性 LRU LFU
关注点 数据的访问时间 数据的访问频率
适用场景 有明显热点数据的场景 访问频率差异较大的场景
优点 简单高效,适合短期热点数据 更精准,适合长期高频数据
缺点 可能误删高频但近期未访问的数据 需要额外记录访问频率,开销较大

三、缓存淘汰策略与过期策略的结合应用

在实际应用中,缓存淘汰策略和过期策略通常需要结合使用,以满足不同的业务需求。

1. 热点数据缓存

  • 过期策略:为热点数据设置较长的过期时间。
  • 淘汰策略 :使用 allkeys-lru,优先保留最近访问的热点数据。
  • 场景:新闻、社交媒体热门内容。

2. 临时数据缓存

  • 过期策略:为临时数据(如验证码、会话)设置较短的过期时间。
  • 淘汰策略 :使用 volatile-ttl,优先淘汰即将过期的数据。
  • 场景:验证码、会话缓存。

3. 冷数据清理

  • 过期策略:为冷数据设置过期时间。
  • 淘汰策略 :使用 volatile-lfu,优先淘汰访问频率低的冷数据。
  • 场景:历史数据、低频访问数据。

4. 不允许数据丢失的场景

  • 过期策略:不设置过期时间,或设置较长的过期时间。
  • 淘汰策略 :使用 noeviction,确保数据不被淘汰。
  • 场景:金融、交易系统。

四、总结

1. LRU 和 LFU 的选择

  • 如果业务有明显的热点数据,选择 LRU。
  • 如果业务需要关注数据的访问频率,选择 LFU。

2. 过期策略的选择

  • 如果数据有明确的生命周期,设置 过期时间。
  • 如果需要及时清理过期键,启用 定期删除。

3. 结合使用

  • 根据业务特点,合理配置 缓存淘汰策略 和 过期策略,以优化 Redis 的性能和资源利用率。

通过合理选择策略,可以有效提升 Redis 的缓存命中率和系统性能。

相关推荐
大牧师17 分钟前
Mybatis 框架教程
java·数据库·mybatis·数据持久化·orm
行百里er1 小时前
Redis 缓存穿透、雪崩、击穿
redis
有想法的py工程师1 小时前
PostgreSQL【内核】 CBO 优化器的“早停下注”与数学模型失效分析
数据库·postgresql
冰暮流星1 小时前
sql之计算
数据库·sql
dishugj2 小时前
HANA集群状态监控
数据库·系统架构
小蒜学长2 小时前
基于Java的公司采购系统的设计与实现(代码+数据库+LW)
java·数据库·spring boot·后端·公司采购系统
lee_tianbai2 小时前
Java SSM 电影票预定系统|完整前后端项目,开箱即用(源码分享)
java·开发语言·数据库
SM_YHJ2 小时前
RFID通道门禁与资产台账联动的自动登记技术实现方案
大数据·数据库·人工智能
PaperData3 小时前
2014-2024年省级居民消费结构升级
数据库