MST

星途 面试题库

面试题:Redis缓存穿透与命中率提升

在提升Redis缓存命中率过程中,缓存穿透问题可能会导致大量无效请求绕过缓存直接访问后端数据库,从而降低缓存命中率。请详细阐述缓存穿透产生的原因,并提出至少两种有效的解决方案,说明每种方案在提升缓存命中率方面的原理。
10.9万 热度难度
数据库Redis

知识考点

AI 面试

面试题答案

一键面试

缓存穿透产生的原因

  1. 恶意请求:攻击者故意构造不存在的 key 频繁请求,由于缓存中没有,每次都会去查询数据库,而数据库也无对应记录,导致大量请求穿透缓存直达数据库。
  2. 数据异常:业务系统中某些数据在特定情况下未正常写入缓存,或者缓存数据过期后没有及时重新加载,而此时恰好有请求访问这些数据,就会造成缓存穿透。

解决方案及原理

  1. 布隆过滤器
    • 原理:在缓存之前使用布隆过滤器,布隆过滤器是一种概率型数据结构,它可以高效地判断一个元素是否存在于集合中。当一个请求到达时,先经过布隆过滤器判断 key 是否可能存在。如果布隆过滤器判断 key 不存在,那么可以直接返回,不再查询数据库,从而避免无效请求穿透到数据库。这样能大幅减少对数据库的无效访问,使真正有效的请求更多地命中缓存,提升缓存命中率。因为如果布隆过滤器拦截了大量无效请求,数据库压力降低,缓存加载数据更稳定,后续请求命中缓存的概率就提高了。
  2. 空值缓存
    • 原理:当查询数据库发现数据不存在时,也将这个 key 对应的空值存入缓存,并设置一个较短的过期时间。这样下次相同的请求过来时,缓存中就有这个 key 的记录(虽然是表示不存在的空值),就不会再去查询数据库,直接返回空值。减少了对数据库的无效查询,保证了缓存对请求的正常响应,提升了缓存命中率。因为每次请求都能在缓存中得到响应,不会因为数据库无记录而频繁绕过缓存。