MST

星途 面试题库

面试题:Redis与MySQL结合应对高并发读时如何处理缓存穿透问题

在Redis与MySQL缓存结合应对高并发读请求场景下,假设存在恶意请求访问数据库中不存在的数据,导致每次请求都穿透Redis缓存直达MySQL,如何有效处理这种缓存穿透问题?请列举至少两种常见解决方案并简要说明原理。
49.8万 热度难度
数据库Redis

知识考点

AI 面试

面试题答案

一键面试
  1. 布隆过滤器(Bloom Filter)
    • 原理:布隆过滤器是一种概率型数据结构,它可以高效地判断一个元素是否在一个集合中。在处理缓存穿透问题时,将数据库中已有的数据主键(如用户ID、商品ID等)添加到布隆过滤器中。当有请求到达时,先通过布隆过滤器判断该请求的数据主键是否存在。如果布隆过滤器判断不存在,那么就直接返回,不再查询数据库,从而避免了对不存在数据的无效查询穿透到数据库。虽然布隆过滤器存在一定的误判率(即判断存在但实际不存在),但误判率可以通过合理设置布隆过滤器的参数来控制在较低水平。
  2. 缓存空值
    • 原理:当请求的数据在数据库中不存在时,仍然在Redis中缓存这个空值(如缓存一个特殊的标记表示数据不存在),并设置一个较短的过期时间。这样后续相同的请求过来时,直接从Redis中获取到这个空值,而不会穿透到MySQL。设置较短过期时间是为了防止在数据实际插入数据库后,因为缓存空值一直存在而导致新数据无法被正确读取。