news 2026/4/18 10:50:31

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

作者头像

张小明

前端开发工程师

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/18 7:35:18

Spring Boot 插件化开发模式,即插即用

一、前言 二、Java常用插件实现方案 三、SpringBoot中的插件化实现 四、插件化机制案例实战 五、写在文末 一、前言 插件化开发模式正在很多编程语言或技术框架中得以广泛的应用实践,比如大家熟悉的jenkins,docker可视化管理平台rancher&#xff0c…

作者头像 李华
网站建设 2026/4/18 4:05:04

2025年学术研究AI工具权威榜单:六大写作模型创新点与实用性解析

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

作者头像 李华
网站建设 2026/4/18 4:03:07

零样本语音生成新突破:基于GLM-TTS的高保真情感语音合成指南

零样本语音生成新突破:基于GLM-TTS的高保真情感语音合成指南 在虚拟主播24小时不间断直播、AI有声书自动朗读、智能客服拟人化应答成为常态的今天,用户早已不再满足于“能说话”的机器语音。他们期待的是富有情感起伏、音色个性鲜明、发音准确自然的声音…

作者头像 李华
网站建设 2026/4/17 11:41:56

CTF Web 方向入门:3 道基础题带你拿首血

CTF Web 方向入门:3 道基础题带你拿首血 对于计算机专业转行网络安全的新手来说,CTF Web 方向是最易入门的赛道 —— 它不需要复杂的二进制逆向知识,只需利用你已有的 HTML、Python、SQL 基础,就能快速解出基础题。本文精选攻防世…

作者头像 李华
网站建设 2026/4/18 4:04:55

如何用GLM-TTS实现个性化语音克隆?超详细教程

如何用GLM-TTS实现个性化语音克隆?超详细教程 在内容创作和人机交互日益智能化的今天,用户早已不满足于机械、千篇一律的“机器人语音”。无论是为有声书赋予独特声线,还是让智能客服拥有亲和力十足的声音,大家想要的是像真人一样…

作者头像 李华