51mee - AI智能招聘平台Logo
模拟面试题目大全招聘中心会员专区

在缓存系统中,如何设计缓存淘汰策略?请结合高并发场景下的热点数据访问,说明如何通过布隆过滤器减少缓存穿透,以及如何实现缓存雪崩的防护。

新凯来逻辑工程师难度:困难

答案

1) 【一句话结论】在缓存系统中,需结合热点数据特性选择淘汰策略(如LRU/LFU),通过布隆过滤器降低缓存穿透概率,并采用分布式锁、热点数据预热、过期时间随机化等手段防护缓存雪崩,确保高并发下缓存系统稳定。

2) 【原理/概念讲解】

  • 缓存淘汰策略:缓存空间有限,需淘汰旧数据。常见有LRU(最近最少使用,淘汰最久未使用的数据)、LFU(最不经常使用,统计访问频率,淘汰访问次数最少的数据)、LRU-K(结合访问频率和最近时间,更精准)。类比:图书馆书架,热门书籍(热点数据)保留,冷门书淘汰。
  • 布隆过滤器:概率性数据结构,用于判断元素是否存在于集合中(可能误判,但不会漏判)。原理:多个哈希函数将元素映射到位数组,插入时置位,查询时所有哈希位都为1则可能存在。类比:超市购物篮的标签,标记商品是否购买过(可能标记未买过的商品,但不会漏标已买过的)。
  • 缓存雪崩:缓存数据集中过期,大量请求直接访问后端数据库,导致后端压力激增。类比:水库决堤,大量水流涌入,导致下游设施过载。

3) 【对比与适用场景】

  • 缓存淘汰策略对比:
    | 策略 | 定义 | 特性 | 使用场景 | 注意点 |
    |------|------|------|----------|--------|
    | LRU | 淘汰最近最少使用的 | 简单,适合热点数据 | 通用,如电商商品缓存 | 可能误判(如双端队列实现) |
    | LFU | 淘汰访问频率最低的 | 需维护频率计数 | 热门数据(如视频网站视频) | 计数复杂度高 |
    | LRU-K | 结合频率和时间 | 更精准 | 高价值数据(如金融交易数据) | 实现复杂 |

  • 布隆过滤器 vs 缓存空对象:
    | 方案 | 定义 | 优点 | 缺点 | 适用场景 |
    |------|------|------|------|----------|
    | 布隆过滤器 | 概率性哈希集合 | 体积小,查询快 | 有误判(可能返回“存在”但实际不存在) | 需要高并发、热点数据(如查询不存在的用户ID) |
    | 缓存空对象 | 存储空值 | 无误判 | 需额外存储空对象,占用空间 | 低并发、数据量小 |

4) 【示例】

  • 热点数据访问与布隆过滤器:
    请求路径:/user/info?userId=10001

    1. 布隆过滤器判断:查询userId是否在集合中(假设已插入所有用户ID)。
    2. 若返回“可能存在”,则查询缓存(Redis):
      • 若缓存命中,返回数据;
      • 若缓存未命中,查询数据库,存入缓存,并更新布隆过滤器(插入userId)。
    3. 若布隆过滤器返回“可能不存在”,直接返回404或数据库查询(避免缓存穿透)。
  • 缓存雪崩防护:

    1. 分布式锁限流:使用Redis分布式锁,每个请求加锁,限流后缓存预热;
    2. 热点数据预热:在系统启动或低峰期,预加载热点数据到缓存;
    3. 过期时间随机化:将缓存过期时间随机偏移(如10s±2s),避免集中过期。

5) 【面试口播版答案】
“面试官您好,关于缓存淘汰策略,核心是结合热点数据特性选择策略,比如LRU适合通用场景,LFU适合高频访问数据。布隆过滤器用于减少缓存穿透,通过概率性哈希判断请求是否可能命中缓存,避免空查询导致数据库压力。缓存雪崩防护则通过分布式锁限流、热点数据预热、过期时间随机化,确保高并发下缓存系统稳定。具体来说,比如热点数据访问时,先布隆过滤器判断,若可能存在则查缓存,否则查数据库;缓存雪崩时,用分布式锁控制并发,或提前预热数据,避免集中过期。”

6) 【追问清单】

  • 问:布隆过滤器的误判率如何控制?
    答:通过调整位数组长度和哈希函数数量,降低误判率(如位数组长度为元素数量的k倍,k越大误判率越低)。
  • 问:缓存雪崩的另一种防护方法?
    答:缓存分片,将数据分散到多个缓存节点,避免单节点过期导致雪崩。
  • 问:LRU淘汰策略的实现复杂度?
    答:双端队列+哈希表,时间复杂度O(1),但需考虑内存消耗。
  • 问:布隆过滤器如何更新?
    答:插入新元素时,所有哈希函数计算后置位位数组;查询时所有位为1则可能存在。
  • 问:缓存雪崩的分布式锁实现?
    答:使用Redis的SETNX命令,加锁后执行缓存预热,解锁后释放。

7) 【常见坑/雷区】

  • 布隆过滤器误判导致缓存穿透:若误判为“存在”,仍可能返回空数据,需结合缓存空对象或二次验证。
  • 缓存雪崩的过期时间随机化:若偏移量过小,仍可能集中过期;偏移量过大可能影响缓存利用率。
  • 淘汰策略的选择:若热点数据不明确,LRU可能误淘汰,需结合业务特征(如访问频率)。
  • 布隆过滤器的参数设置:位数组长度不足会导致高误判率,需根据数据量估算。
  • 缓存穿透的判断:若布隆过滤器误判为“存在”,直接查缓存可能导致空值,需二次验证(如数据库查询)。
51mee.com致力于为招聘者提供最新、最全的招聘信息。AI智能解析岗位要求,聚合全网优质机会。
产品招聘中心面经会员专区简历解析Resume API
联系我们南京浅度求索科技有限公司admin@51mee.com
联系客服
51mee客服微信二维码 - 扫码添加客服获取帮助
© 2025 南京浅度求索科技有限公司. All rights reserved.
公安备案图标苏公网安备32010602012192号苏ICP备2025178433号-1