首页 > 其他分享 >缓存穿透、缓存击穿、缓存雪崩

缓存穿透、缓存击穿、缓存雪崩

时间:2024-03-19 22:59:31浏览次数:25  
标签:缓存 请求 数据库 击穿 穿透 雪崩

缓存穿透

缓存穿透指的是请求的数据在缓存中不存在,并且也不存在于数据库中,每次请求都落到了数据库上,导致数据库压力增大。

举例: 现在你有一家书店,书分别存放在书架(缓存)和仓库(数据库)中。一本书在书架上和仓库里都不存在,但是总是有人来找这本书,导致你每次都需要去仓库中寻找。

图解:

解决方案:

1、缓存空结果

如果系统发现 Redis 及 DB 中都不存在该资源,就缓存空结果一段时间。需要注意哈,这次的失效时间不能设置的太长,否则数据的实效性会产生很大的问题。

2、用户合法性校验

对用户的请求合法性进行校验,拦截恶意重复请求。

3、布隆过滤器

如果布隆过滤器判断不存在一定不存在,但是布隆过滤器判断存在不一定真存在

缓存击穿

缓存击穿指的是一个请求需要的数据不在缓存中,但数据库中存在,在某一个时刻,缓存中的数据过期了,同时有大量请求(都是请求这个过期数据的请求)到达,大量请求落到了数据库上。

举例: 现在你有一家书店,书分别存放在书架(缓存)和仓库(数据库)中。一本书本来在书架上有,但是被买完了(缓存失效),这个时候有很多人来买这边书,大家都去仓库中找这本书

图解:

解决方案:

1、设置热点数据永不过期

对于频繁访问的热点数据,设置其在缓存中永不过期,通过后台更新缓存来保证数据的新鲜度。

2、使用互斥锁

对于同一资源的访问,使用互斥锁确保同时只有一个请求去数据库中查询并更新到缓存,其他请求等待缓存更新后再访问缓存。(这个操作会降低吞吐量,使用第一种方案就可以解决缓存击穿问题)

缓存雪崩

缓存雪崩指的是大量的缓存数据在同一时间失效,导致大量请求(不同请求)到达数据库中。

举例: 现在你有一家书店,书分别存放在书架(缓存)和仓库(数据库)中。由于书店太过火爆,你的很多书都卖完了,同时又来了很多顾客需要购买这些书,大家只能都是仓库中找书

图解:

解决方案:

1、分散设置过期时间

避免缓存设置相近的有效期,我们可以在设置有效期时增加随机值

2、多级缓存

使用多级缓存策略,例如:本地缓存、分布式缓存(redis)等

3、缓存预热

面临将要来的大量请求,可以先去数据库中去数据到缓存中,并设置不同的过期时间

总结

  • 缓存击穿和缓存穿透都是访问的同一组数据,数据都在缓存中不存在,不同点在于缓存穿透的数据在数据库中也不存在,缓存击穿的数据在数据库中存在
  • 缓存雪崩是不同组数据在缓存中失效
  • 相同点:同一时间都有大量请求到达,请求数据在缓存中都不存在

参考文章:

牛逼,三句话搞懂 Redis 缓存穿透、击穿、雪崩! - 知乎

Redis详解(十二)------ 缓存穿透、缓存击穿、缓存雪崩 - 知乎

缓存出问题了怎么办?缓存穿透、缓存击穿、缓存雪崩 - 掘金

标签:缓存,请求,数据库,击穿,穿透,雪崩
From: https://blog.csdn.net/q_334173630/article/details/136858031

相关文章

  • Springboot+Redis:实现缓存 减少对数据库的压力
    ......
  • 如何使用缓存来提高Web应用的性能?
    一、如何使用缓存来提高Web应用的性能? 使用缓存是提高Web应用性能的一种有效方法。缓存可以在多个层面上实现,包括浏览器缓存、代理服务器缓存、数据库查询缓存以及应用层面的缓存等。以下是一些关于如何使用缓存来提高Web应用性能的建议:浏览器缓存:通过设置HTTP缓存头(如Ca......
  • 《优化接口设计的思路》系列:第九篇—用好缓存,让你的接口速度飞起来
    一、前言大家好!我是sum墨,一个一线的底层码农,平时喜欢研究和思考一些技术相关的问题并整理成文,限于本人水平,如果文章和代码有表述不当之处,还请不吝赐教。作为一名从业已达六年的老码农,我的工作主要是开发后端Java业务系统,包括各种管理后台和小程序等。在这些项目中,我设计过单/多......
  • androidui开发框架,,三级缓存框架问题你都了解了吗
    面经分享第一部分是我前端面试的经验总结,第二部分是我认为比较有思考空间的题目经验总结一份漂亮的简历,需要包括以下部分(排版由上而下)个人亮点(专精领域,个人博客,开源项目)教育经历(毕业院校,在校经历、荣誉)工作经历(实习)项目经历专业技能扎实的前端基础,比如你知道<......
  • Redis作为缓存,MySQL数据库如何与Redis保持一致性(双写一致性)?
    Redis作为缓存,MySQL数据库如何与Redis保持一致性(双写一致性)?双写一致性:​ 修改了数据库中的数据的同时,也要更新缓存的数据,保证数据库和缓存中的数据保持一致。请求数据的执行流程:​ 请求去访问Redis,如果Redis缓存中有数据则返回数据,如果Redis缓存中没有数据则去查数据库,数......
  • 聊聊CDN、缓存插件、网站速度优化
    导语        对于网站速度优化这一永恒的话题,作为一名老站长,我的最新建议是,在现今的网络环境下,最大限度地利用CDN(ContentDeliveryNetwork)服务已经成为提升网站性能的必备策略之一。尤其是在确保前端页面快速载入方面,CDN通过在全球范围内分布的服务器节点缓存静态......
  • Redis缓存和MyBaits整合
    目录一.基础知识1.Redis缓存2.特点二.使用Redis1.下载redis2.安装RedisDesktopManager软件3.连接Redis三.Redis缓存和MyBaits整合1.加入依赖2.配置文件3.配置类4.创建数据库和实体类5.使用四.练习一.基础知识1.Redis缓存缓存(*Cache),就是数据交换的*缓......
  • arp动态表缓存清除
    一、arp表里清除表状态:1,Delay:请求arp2,Reachab:响应arp3,Stale此状态下,待gc_stale_time超时后,准备gc_interval定期清理二、限制条件base_reachable_time:后变为Stalegc_thresh1:数量限制gc_stale_time:时间限制gc_interval:定期间隔三,测试在断开连接,经测试发现即使......
  • 华为OD机试 C++ -文件缓存系统
    文件缓存系统前言:本专栏将持续更新互联网大厂机试真题,并进行详细的分析与解答,包含完整的代码实现,希望可以帮助到正在努力的你。关于大厂机试流程、面经、面试指导等,如有任何疑问,欢迎联系我,wechat:steven_moda;email:[email protected];备注:CSDN。题目描述请设计一个文件缓......
  • 华为OD机试Js - 文件缓存系统
    文件缓存系统前言:本专栏将持续更新互联网大厂机试真题,并进行详细的分析与解答,包含完整的代码实现,希望可以帮助到正在努力的你。关于大厂机试流程、面经、面试指导等,如有任何疑问,欢迎联系我,wechat:steven_moda;email:[email protected];备注:CSDN。题目描述请设计一个文件缓......