news 2026/9/3 4:51:42

缓存穿透、击穿、雪崩,这样回答要满分呀!

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
缓存穿透、击穿、雪崩,这样回答要满分呀!

缓存穿透、缓存击穿、缓存雪崩是经典的老八股文啦,之前去面试一个银行,就被问到啦,本文跟大家聊聊怎么回答哈~~

1.缓存穿透问题

先来看一个常见的缓存使用方式:

读请求来了,先查下缓存,缓存有值命中,就直接返回;缓存没命中,就去查数据库,然后把数据库的值更新到缓存,再返回。

1.1 什么是缓存穿透问题

缓存穿透:指查询一个一定不存在的数据,由于缓存是不命中时需要从数据库查询,查不到数据则不写入缓存,这将导致这个不存在的数据每次请求都要到数据库去查询,进而给数据库带来压力。

通俗点说,读请求访问时,缓存和数据库都没有某个值,这样就会导致每次对这个值的查询请求都会穿透到数据库,这就是缓存穿透。

1.2 缓存穿透产生原因

缓存穿透一般都是这几种情况产生的:

  • 业务逻辑设计不合理:比如大多数用户都没开守护,但是你的每个请求都去查询缓存,查询某个userid有没有开守护~

  • 黑客非法请求攻击:比如黑客故意捏造大量非法请求,以读取不存在的业务数据。

  • 数据生命周期管理问题:某些数据被删除后,缓存没有及时更新,导致后续查询穿透。

如何避免缓存穿透呢? 一般有三种方法。

  • 用户请求进行有效性检查:它的核心思想是对请求参数进行合法性校验,提前过滤掉明显无效的请求。(主要包括数据格式校验、数据范围校验、权限校验等等)

  • 缓存空值:如果查询数据库为空,我们可以给缓存设置个空值,或者一个特殊标记的默认值,设置一个较短的过期时间,避免频繁访问数据库。(业务上比较常用,简单有效)

  • 使用布隆过滤器:快速判断数据是否存在。即一个查询请求过来时,先通过布隆过滤器判断值是否存在,存在才继续往下查。如果不存在,就不访问数据库啦~~

布隆过滤器原理:它由初始值为0的位图数组和N个哈希函数组成。一个对一个key进行N个hash算法获取N个值,在比特数组中将这N个值散列后设定为1,然后查的时候如果特定的这几个位置都为1,那么布隆过滤器判断该key存在,否则不存在。

2.缓存雪崩问题

缓存雪崩:在某个时间点,大量缓存数据同时过期, 导致大量请求直接访问数据库,引起数据库压力过大甚至down机。

2.1 缓存雪崩常见原因:

  • 缓存设置了集中的过期时间:大量缓存数据设置了相同或者相似的过期时间,导致它们在同一时间段内集体过期。

  • 缓存预热不充分:系统启动时缓存数据加载不充分,导致大量请求直接访问数据库。

  • 缓存服务器宕机:redis集群中,多个节点同时宕机,导致大量缓存数据不可用

常见一些经典场景:促销活动结束(大量商品缓存同时失效)、或者定时任务触发(比如凌晨批量更新缓存,固定过期时间触发雪崩)

2.2 如何解决缓存雪崩的问题

通过分散过期时间,是解决缓存雪崩最简单有效的解决方案~~

可通过均匀设置过期时间解决,即让过期时间相对离散一点。如采用一个较大固定值+一个较小的随机值,1小时+0到100秒酱紫。

Redis 故障宕机也可能引起缓存雪奔。这就需要构造Redis高可用集群啦。比如redis主从、哨兵模式、集群模式(Redis cluster)。

当然,还有最后的防线,就是限流和降级~~

3. 缓存击穿问题

缓存击穿是指某个热点数据在缓存中过期的同时,大量并发请求访问该数据,导致这些请求直接访问数据库,造成数据库压力骤增。

缓存击穿看着跟缓存雪崩有点像,其实它两区别是:

  • 缓存击穿针对单个热点 Key,缓存雪崩针对大量Key或整个缓存服务

  • 影响结果不一样,缓存击穿导致数据库短期压力剧增;缓存雪崩则可能导致数据库被压垮

3.1 缓存击穿常见原因

  • 高并发场景,比如秒杀活动呀,热点新闻等

  • 管理员手动误清除:运维人员误删或主动清理某个热点Key(如商品价格调整),删除后突发流量访问。

3.2 缓存击穿的解决方案

常见的解决方案:

  1. 使用互斥锁方案。缓存失效时,不是立即去加载db数据,而是先使用某些带成功返回的原子操作命令,如(Redis的setnx)去操作,成功的时候,再去加载db数据库数据和设置缓存。否则就去重试获取缓存。

  2. “永不过期”,是指没有设置过期时间,但是热点数据快要过期时,异步线程去更新和设置过期时间。

  3. 随机过期时间,通过为热点数据设置略有差异的过期时间,避免大量热点数据同时失效~~

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/2 22:33:09

amfe-flexible + postcss-pxtorem 深度解析:原理、配置与工程化实践

amfe-flexible postcss-pxtorem 是 H5 移动端 REM 适配的工业级方案,核心是动态根字体大小 自动 px 转 rem,实现「一套设计稿适配所有移动端设备」的目标。以下从原理、配置、进阶用法、排错四个维度详细展开。 一、方案核心原理 1. amfe-flexible&am…

作者头像 李华
网站建设 2026/9/2 22:32:18

2025年最佳AI论文助手评选:六家主流平台的核心功能差异与用户评价

2025AI写论文模型排名:6大平台最新对比推荐 核心工具对比速览 工具名称 主要功能 处理时间 适配检测系统 特色优势 aibiye 降AIGC率查重 20分钟 知网/格子达/维普 精准调整表达风格,保留学术严谨性 aicheck AI检测降重 15分钟 主流检测平台…

作者头像 李华
网站建设 2026/9/3 1:19:30

语音合成也能做个性化定制?试试这款支持发音控制的开源工具

语音合成也能做个性化定制?试试这款支持发音控制的开源工具 在虚拟主播24小时直播、有声书自动朗读、智能客服全天候应答的今天,我们对“AI说话”的要求早已不是“能出声”那么简单。用户开始在意:这声音像不像真人?有没有情绪起伏…

作者头像 李华
网站建设 2026/9/3 1:31:15

如何用PHP高效解析图像识别结果?:3种高可用方案对比实测

第一章:PHP图像识别结果解析的技术背景与挑战在现代Web应用中,图像识别技术被广泛应用于内容审核、智能搜索和自动化处理等场景。PHP作为服务端常用语言之一,虽然并非直接执行深度学习模型的首选,但常承担接收识别结果、解析响应数…

作者头像 李华
网站建设 2026/9/3 0:23:54

GLM-TTS支持多音字发音控制:音素级调节让朗读更自然

GLM-TTS支持多音字发音控制:音素级调节让朗读更自然 在中文语音合成的应用现场,一个看似不起眼的“重”字,可能就让整个项目陷入尴尬——是“zhng量”还是“chng新开始”?传统TTS系统常因上下文理解不足而误读多音字,导…

作者头像 李华
网站建设 2026/9/3 3:07:43

清华系AI语音模型GLM-TTS深度评测:支持网盘直链下载与批量推理

清华系AI语音模型GLM-TTS深度评测:支持网盘直链下载与批量推理 在短视频、播客和数字人内容爆发的今天,个性化语音合成早已不再是“锦上添花”,而是决定用户体验的关键一环。传统TTS系统要么音色千篇一律,要么需要数小时训练才能克…

作者头像 李华