星海

Redis · 单选题 · 第 43 题

Java 后端开发面试 · 第 43 题

大量请求查询数据库里根本不存在的数据,每次都穿过缓存打到数据库,这叫什么?常见对策是?

  1. A缓存击穿,可以给热点 key 加互斥锁,只让一个请求去重建缓存
  2. B缓存穿透,可以用布隆过滤器拦截,或者把空结果也短时间缓存起来
  3. C缓存雪崩,可以给 key 的过期时间加上随机值,把过期时间打散
  4. D缓存预热,可以在系统启动前把热点数据提前全部加载进缓存里

答案

B B. 缓存穿透,可以用布隆过滤器拦截,或者把空结果也短时间缓存起来

解析

穿透的特征是数据本来就不存在,缓存永远命中不了。布隆过滤器能以很小的空间判断「一定不存在」,缓存空值则要设置较短的过期时间。击穿说的是单个热点 key 过期,雪崩说的是大量 key 同时过期或 Redis 宕机,三者的对策不同,要分清。

在线刷这套题:即时判分、错题本、闪卡复习,不用登录就能练。