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

解决方案:

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

相关推荐
Rain的Java大神之路4 分钟前
Docker搭建Redis集群完全指南
java·运维·redis·后端·docker·容器·架构
Raas10011 分钟前
大模型网关和API网关区别是什么?MAI Gateway统一AI流量治理
java·大数据·运维·人工智能·gateway·企业级·ai网关
BioRunYiXue20 分钟前
RACE技术全攻略:从全长克隆到靶基因验证
java·javascript·网络·人工智能·科技·算法·eclipse
AC赳赳老秦29 分钟前
个保法下数据处理:OpenClaw 自动过滤公开数据中的个人信息,保障采集分析合规性
java·python·sqlite·json·php·deepseek·openclaw
kymjs张涛33 分钟前
DeepSeek Harness源码分析:非 AI 开发者的 Agent 学习总结
前端·后端·面试
rannn_11136 分钟前
Java 后端面试题总结:点赞功能怎么实现?
java·后端·面试
CodeStats1 小时前
【Java进程通信】Java进程通信系统完全指南:从ProcessBuilder底层原理到多语言实战
java·前端·python·进程·ai编程·processbuilder
绿智校园1 小时前
物联网平台选型指南:为什么底层协议自研比云端SDK接入更可靠?
java·物联网·struts
T01156181 小时前
艺培场馆课时预约小程序用户端 & 后台联动踩坑上篇(预约、课时、缓存、消息、学员端自身问题)
java·缓存·小程序·bug·全栈项目实战手记·艺培课时系统‘’
wenruozhu1 小时前
【面试题解】 Vue 响应式原理
前端·面试