MST

星途 面试题库

面试题:缓存设计之缓存穿透问题处理

在Web应用的缓存设计中,缓存穿透是一个常见问题。请描述什么是缓存穿透,以及至少两种解决缓存穿透的方法,并说明每种方法的原理。
42.4万 热度难度
后端开发缓存设计

知识考点

AI 面试

面试题答案

一键面试

缓存穿透的定义

缓存穿透指的是客户端请求的数据在缓存中不存在且在数据库中也不存在,导致请求直接穿透到数据库,若这类请求大量存在,会给数据库造成巨大压力甚至导致数据库崩溃。

解决缓存穿透的方法及原理

  1. 布隆过滤器(Bloom Filter)
    • 原理:布隆过滤器是一个基于哈希的数据结构,它通过多个哈希函数对数据进行映射,将数据映射到一个位数组的不同位置并将这些位置置为1。当查询数据时,数据经过同样的哈希函数映射,如果对应的位数组位置不全为1,则可以肯定数据不存在;如果全为1,则大概率存在(存在误判)。这样在请求到达数据库之前,通过布隆过滤器先进行过滤,对于一定不存在的数据直接返回,避免无效请求穿透到数据库。
  2. 缓存空值
    • 原理:当查询的数据在数据库中不存在时,也将这个空结果缓存起来,并设置一个较短的过期时间。后续相同的请求就可以直接从缓存中获取这个空值,而不会再穿透到数据库。较短的过期时间是为了防止数据在数据库中新增后,缓存中仍为空值而导致新数据无法被正常查询。