java面试题-Redis缓存穿透、雪崩、击穿

远离八股文,面试大白话,通俗且易懂

看完后试着用自己的话复述出来。有问题请指出,有需要帮助理解的或者遇到的真实面试题不知道怎么总结的也请评论中写出来,大家一起解决。

java面试题汇总-目录-持续更新中

这个问的挺多的,但是实际项目遇到的很少。网上看了一些标准答案,结合实际项目,做了下总结。

1、缓存穿透

含义:频繁的查询一个不存在于缓存中的数据,导致每次都是访问数据库。

场景:多存在于恶意攻击。正常业务肯定都是先查缓存,然后存在就直接返回,不存在就查询数据库。如果数据库中存在就保存在缓存里面,不存在直接返回null。但是此时有人恶意攻击,查询的全都是缓存里面不存在的,甚至数据库也不存在。那么每次就都会查询数据。

解决方案:

布隆过滤器:就是已存在的数据key提前存到这个过滤器里面。如果来请求了,就先看一下过滤器中是否有这个key,有的话执行后面的操作。没有就直接返回了。(这个不太好用,因为还需要考虑实时的更新这个过滤器中的值,但是面试我还是会提到。)

缓存空值:就是请求来了,缓存中没有,去查询数据库,数据库返回null。即使返回null了,我也把这个数据(key:空值)存在缓存里面。你下次来请求,这样就直接从缓存里面取空值给你。(但是这个要考虑一下清理操作,因为你存了空值,如果哪天业务里面真有了这个key,那么此时返回null就不合适了:两种方案:1是定时清理为空的key,2是创建数据的时候同时更新缓存)

**ip过滤:**这个是我做项目常用的,但不仅仅局限于缓存穿透,主要是防止恶意攻击。我在每个项目的过滤其中都加了IP过滤。具体就是:在项目的过滤器中,获取用户的请求ip,如果相同ip在指定时间段内请求次数大于我设定的次数,比如10秒 20次。就直接拉进黑名单。

2、缓存雪崩

含义: 缓存雪崩是指缓存中的大量数据同时失效,导致大量的请求直接访问数据库,增加了数据库的负载。-多个

**场景:**就是数据库中很多缓存都是设置了两小时失效,结果在俩小时突然到的时候,缓存都失效了,然后大量的请求直接去请求数据库。

解决方案:

错峰:给过期时间错开,本来两小时过期,可以改成1小时50分钟等等

加锁:单机环境互斥锁、分布式环境分布式锁。保证同一时间只有一个能线程能请求到。但是加锁需要注意加锁的粒度。因为加了锁对平时的查询也会有影响,所以范围尽可能小。不能得不偿失。

3、缓存击穿

含义: 缓存击穿是指对于某个热点数据的并发请求,在缓存失效的瞬间,大量请求直接访问数据库,导致数据库负载剧增。-单个

**场景:**这种在互联网行业比较常见,比如商城、购票、下单等等场景下。同时是高峰期的时候,比如双11期间,突然某个商品缓存没了。一大波请求直接到达,全都去请求数据库了。

解决方案:

对于这种高频的访问热点,就不要设置过期时间了!!如果非要设置那么就定时刷新缓存。

相关推荐
雨辰AI2 分钟前
生产级实测:SpringBoot3 + 达梦数据库接口从 200ms 优化至 20ms 完整调优指南
java·数据库·spring boot·后端·政务
(Charon)31 分钟前
【C++ 面试高频:内存管理、RAII 和智能指针详解】
java·开发语言·word
凡人叶枫41 分钟前
Effective C++ 条款39:明智而审慎地使用 private 继承
java·数据库·c++·嵌入式开发
星哥的编程之路1 小时前
别再调 API 就说自己会 RAG 了,看看真正的企业级 AI 智能体长什么样
后端·面试
轻刀快马1 小时前
跨越软硬件的共鸣(二):从 Cache 写策略看 Redis 与 DB 的一致性博弈
java·开发语言·redis·计算机组成原理
折哥的程序人生 · 物流技术专研1 小时前
Java 23 种设计模式:从踩坑到精通 | 装饰器模式 —— 比继承更灵活的扩展方式,你用过吗?
java·装饰器模式·java面试·结构型模式·java设计模式·javaio·从踩坑到精通
lili00121 小时前
2026 企业 AI 选型新范式:OpenRouter Fusion 证明多模型融合性价比远超单模型,企业该如何重构技术栈? - 微元算力(weytoken)
java·人工智能·python·重构·ai编程
shushangyun_1 小时前
汽车服务行业B2B平台+AI解决方案哪家专业:2026年最新测评
java·运维·网络·数据库·人工智能·汽车
A.说学逗唱的Coke1 小时前
【大模型专题】Spring AI Alibaba × Skill 整合实战:让 AI 真正“会干活
java·人工智能·spring