Redis中的缓存穿透、缓存击穿、缓存雪崩(面试版)

缓存穿透

缓存穿透:查询一个不存在的数据,在mysql数据库中查询不到数据也不会写入缓存,导致每次请求都查询数据库,增加数据库负载。

解决办法:

1、**缓存空值:**将数据库中不存在的结果(例如空值)也缓存起来,并设置一个较短的过期时间,避免频繁查询数据库

2、**使用布隆过滤器:**使用布隆过滤器来快速判断一个请求的数据是否存在,如果布隆过滤器判断数据不存在,则直接返回,避免查询数据库。

  • 布隆过滤器原理:

3、防止非法请求:检查非法请求,封禁其IP以及账号

缓存击穿

缓存击穿: 给某一个key设置了过期时间,当key过期的时候,恰好对这个key有大量的请求过来,这些并发的请求可能会瞬间把DB压垮

解决办法:

1)加互斥锁:保证同一时间只有一个请求来构建缓存,跟缓存雪崩相同。

2)热点数据永不过期:不要给热点数据设置过期时间,在后台异步更新缓存

缓存雪崩

缓存雪崩是指在某个时间点,大量缓存同时失效或被清空,导致大量请求到达数据库或后端系统,造成系统负载激增,甚至引发系统崩溃,这通常是由于缓存中的大量数据在同一时间失效引起的。

解决办法:

1、**设置过期时间随机化:**设置缓存的过期时间,加上一个随机值,避免同一时间大量缓存失效。

2、**使用多级缓存:**引入多级缓存,如Guava或Caffeine作为一级缓存,redis作为二级缓存。

3、**构建集群:**构建多个 Redis 集群提高服务的可用性

相关推荐
逆境不可逃15 小时前
一篇速通Redis 从原理到Java实战(含缓存问题解决方案+集群配置)
数据库·redis·缓存
studyForMokey16 小时前
【Android面试】数据库
android·数据库·面试
Ruihong16 小时前
Vue 的 :deep/:global/:slotted 怎么转成 React ?一份对照指南?
vue.js·react.js·面试
studytosky16 小时前
【高并发内存池】线程缓存核心原理与实现
linux·服务器·git·缓存
Java爱好狂.16 小时前
Redis高级笔记:原理+集群+应用+拓展+源码
java·数据库·redis·spring·java面试·后端开发·java八股文
kyriewen16 小时前
React Diff算法:3个“神级假设”让虚拟DOM快得像闪电
前端·react.js·面试
Lanren的编程日记17 小时前
Flutter 鸿蒙应用内存管理优化实战:对象池+智能缓存+泄漏检测,全方位提升应用稳定性
flutter·缓存·华为·harmonyos
鹏程十八少17 小时前
7. 2026金三银四 Java 虚拟机面试终极版:32 道必考题 + 图解 + 源码精讲
后端·面试·前端框架
雨季mo浅忆17 小时前
模拟面试梳理
面试·职场和发展
耳边轻语99918 小时前
Hermes 如何省token-配置
人工智能·缓存