MST

星途 面试题库

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

在后端开发与微服务架构融合的缓存设计中,缓存穿透是一个常见问题。请阐述什么是缓存穿透,可能会带来哪些危害,并说明至少两种解决缓存穿透问题的方案。
43.0万 热度难度
后端开发缓存设计

知识考点

AI 面试

面试题答案

一键面试

缓存穿透定义

缓存穿透指查询一个根本不存在的数据,由于缓存中没有,所以每次都会去数据库查询,若大量这样的请求,就会直接打到数据库,导致数据库压力骤增。

缓存穿透危害

  1. 数据库压力增大:大量无效请求越过缓存直接访问数据库,可能使数据库负载过高,甚至导致数据库崩溃,影响整个系统的可用性。
  2. 性能下降:系统响应时间变长,用户体验变差,严重时可能导致业务不可用。

解决缓存穿透方案

  1. 布隆过滤器
    • 原理:布隆过滤器是一种概率型数据结构,它可以判断一个元素一定不存在或者可能存在。在系统初始化时,将数据库中所有数据的 key 存到布隆过滤器中。当有查询请求时,先经过布隆过滤器,若判断 key 不存在,则直接返回,不会查询数据库。
    • 优点:空间效率和查询时间都远远超过一般的算法,能有效阻止大量无效请求到达数据库。
    • 缺点:存在误判率,即可能把本来不存在的 key 判断为存在,但可以通过调整布隆过滤器的参数来降低误判率。
  2. 空值缓存
    • 原理:当查询数据库发现数据不存在时,也将这个 key 对应的空值缓存起来,并设置一个较短的过期时间。下次再查询同样的 key 时,缓存中存在空值,直接返回,避免再次查询数据库。
    • 优点:实现简单,能快速解决缓存穿透问题。
    • 缺点:会额外占用一定的缓存空间,并且设置过期时间需要权衡,时间过短可能导致缓存穿透再次出现,时间过长可能会影响数据的实时性。