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期间,突然某个商品缓存没了。一大波请求直接到达,全都去请求数据库了。

解决方案:

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

相关推荐
Goldn.1 小时前
Java核心技术栈全景解析:从Web开发到AI融合
java· spring boot· 微服务· ai· jvm· maven· hibernate
李慕婉学姐2 小时前
【开题答辩过程】以《基于Android的出租车运行监测系统设计与实现》为例,不知道这个选题怎么做的,不知道这个选题怎么开题答辩的可以进来看看
java·后端·vue
m0_740043732 小时前
SpringBoot05-配置文件-热加载/日志框架slf4j/接口文档工具Swagger/Knife4j
java·spring boot·后端·log4j
编织幻境的妖2 小时前
SQL查询连续登录用户方法详解
java·数据库·sql
用户47949283569152 小时前
面试官问"try-catch影响性能吗",我用数据打脸
前端·javascript·面试
沐雪架构师3 小时前
大模型Agent面试精选15题(第四辑)-Agent与RAG(检索增强生成)结合的高频面试题
面试·职场和发展
未若君雅裁3 小时前
JVM面试篇总结
java·jvm·面试
kk哥88993 小时前
C++ 对象 核心介绍
java·jvm·c++
YoungHong19923 小时前
面试经典150题[072]:从前序与中序遍历序列构造二叉树(LeetCode 105)
leetcode·面试·职场和发展
招风的黑耳3 小时前
我用SpringBoot撸了一个智慧水务监控平台
java·spring boot·后端