news 2026/9/18 12:06:30

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

作者头像

张小明

前端开发工程师

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/11 4:02:40

小模型也能当“Agent“!腾讯阿里论文揭示AI开发新范式!

腾讯最新论文展示了一个仅有1.96B参数的语言模型,通过从零开始训练,就能够像agent一样进行规划、推理和工具调用。这篇论文的核心亮点在于,它证明小模型可以在预训练阶段就被“教导”出agentic行为——模型学会将任务分解成多个步骤、调用工具…

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

Airtable数据库驱动HeyGem批量生成参数配置

Airtable数据库驱动HeyGem批量生成参数配置 在数字营销、在线教育和智能客服日益依赖视频内容的今天,企业对个性化、高效率的内容生产能力提出了前所未有的要求。传统视频制作流程中,拍摄、剪辑、配音环环相扣,不仅耗时耗力,还难以…

作者头像 李华
网站建设 2026/9/16 3:33:46

2026专科生必看!9个降AI率工具测评榜单

2026专科生必看!9个降AI率工具测评榜单 为什么专科生需要关注降AI率工具? 随着人工智能技术的不断发展,AIGC(AI生成内容)检测系统在学术领域中的应用越来越广泛。对于专科生而言,撰写论文、报告甚至作业时&…

作者头像 李华
网站建设 2026/9/17 21:47:15

GLM-TTS输出文件在哪?一文搞懂路径与命名规则

GLM-TTS输出文件在哪?一文搞懂路径与命名规则 在语音合成应用日益普及的今天,一个看似简单却常被忽视的问题困扰着不少开发者和内容创作者:我合成了语音,可音频文件到底存到哪儿去了? 尤其当你使用像 GLM-TTS 这类基于…

作者头像 李华
网站建设 2026/9/11 23:08:18

Zoom webinar后自动生成回顾视频:HeyGem插件设想

Zoom Webinar后自动生成回顾视频:基于HeyGem的自动化内容生产实践 在企业线上活动日益频繁的今天,一场成功的Zoom Webinar结束后,真正考验才刚刚开始——如何让这场耗时数小时准备的内容,不只是沉睡在云端录屏里?很多团…

作者头像 李华