MST

星途 面试题库

面试题:缓存设计之缓存穿透问题及解决

在分布式缓存架构中,缓存穿透是一个常见问题,请阐述什么是缓存穿透,以及至少两种解决缓存穿透的方案,并分析每种方案的优缺点。
32.0万 热度难度
后端开发缓存设计

知识考点

AI 面试

面试题答案

一键面试

缓存穿透定义

缓存穿透指客户端请求的数据在缓存中不存在并且在数据库中也不存在,导致请求直接穿透缓存到达数据库,若这类请求量很大,会对数据库造成巨大压力,甚至拖垮数据库。

解决方案及优缺点分析

  1. 布隆过滤器(Bloom Filter)
    • 原理:布隆过滤器是一个很长的二进制向量和一系列随机映射函数。当一个元素被加入集合时,通过K个散列函数将这个元素映射成一个位数组中的K个点,把它们置为1。查询时,只要看看这些点是不是都是1就(大约)知道集合中有没有它了。如果这些点有任何一个0,则被查询元素一定不在;如果都是1,则被查询元素很可能在。
    • 优点:能高效判断数据是否存在,占用内存空间小,查询效率高,能在一定程度上阻止非法请求穿透到数据库。
    • 缺点:存在误判率,即可能把不在集合中的元素误判为在集合中;布隆过滤器维护比较复杂,新增元素需要重新计算哈希值,动态调整大小较麻烦。
  2. 缓存空值
    • 原理:当查询数据在数据库中不存在时,仍然将这个空值缓存起来,设置一个较短的过期时间。后续相同查询就会直接从缓存中获取空值,而不会再查询数据库。
    • 优点:实现简单,不需要额外引入其他组件,对现有系统侵入性小。
    • 缺点:会额外占用缓存空间,可能导致缓存空间浪费;若缓存过期时间设置不当,可能仍然会有短暂的缓存穿透问题。而且对于更新频繁的数据,缓存空值会频繁更新缓存,影响性能。