news 2026/4/16 13:37:05

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

作者头像

张小明

前端开发工程师

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/4/16 3:32:00

异构数据源一键打通,DataX 做海量数据同步,效率飙升 200%!

有个项目的数据量高达五千万,但是因为报表那块数据不太准确,业务库和报表库又是跨库操作,所以并不能使用 SQL 来进行同步。当时的打算是通过 mysqldump 或者存储的方式来进行同步,但是尝试后发现这些方案都不切实际:my…

作者头像 李华
网站建设 2026/4/16 10:20:13

windows录制并制成gif怎么实现

Windows 录制并制作 GIF 有三种主流路径:Win11 原生一键出 GIF、专用工具直录直出、先录视频再转 GIF,按需选即可高效出图。 一、Win11 原生录屏(零工具,≤30秒) 按 WinShiftR 调出录屏浮窗,框选区域&#…

作者头像 李华
网站建设 2026/4/16 10:16:54

快手短视频创作者使用HeyGem制作虚拟主播

快手短视频创作者使用HeyGem制作虚拟主播 在快手、抖音等平台内容竞争日益白热化的今天,一个核心问题摆在每一位创作者面前:如何以极低的成本,持续输出高质量、高频率的视频内容?尤其是知识类、资讯类博主,每天面对“更…

作者头像 李华
网站建设 2026/4/16 10:20:54

99%开发者忽略的PHP视频流安全漏洞(附完整防护方案)

第一章:PHP视频流播放接口的安全现状 随着在线视频服务的普及,基于PHP构建的视频流播放接口在中小型平台中广泛应用。然而,这类接口在设计与实现过程中常因安全机制缺失或配置不当,暴露出严重的安全隐患。攻击者可利用未授权访问、…

作者头像 李华