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

什么是缓存穿透、缓存击穿、缓存雪崩

时间:2023-06-27 22:36:41浏览次数:48  
标签:缓存 请求 数据库 击穿 缓存数据 雪崩 失效

 

缓存穿透(Cache Penetration)是指在使用缓存时,对于一些不存在于缓存中的数据进行频繁访问,导致这些请求直接绕过缓存,查询数据库,并返回空结果。由于缓存无法命中,每次请求都需要经过数据库查询,这会增加数据库的负载压力,并可能导致缓慢的响应时间。

缓存击穿(Cache Breakdown)是指在使用缓存时,某个被大量请求访问的缓存数据过期或被删除,而此时又恰好有大量的请求同时访问这个缓存数据。由于缓存失效,这些请求会直接查询数据库,导致数据库压力骤增,可能引起性能问题、雪崩效应等。

缓存雪崩(Cache Avalanche)是指在使用缓存时,缓存中的大量数据同时过期或失效,而此时又恰好有大量的请求访问这些缓存数据。由于缓存失效,所有的请求都会直接访问数据库,导致数据库瞬时超载,造成系统响应变慢甚至瘫痪。这种现象就像雪崩一样,整个系统不可用。

这三种情况的共同点是缓存失效或无法命中,导致直接查询底层数据源(如数据库),增加了系统的负载压力,影响了性能和可用性。为了避免这些问题,可以采取以下措施:

  1. 缓存穿透:使用布隆过滤器等技术在缓存层进行过滤,过滤掉一些明显不存在的请求,避免其直接查询底层数据源。

  2. 缓存击穿:使用互斥锁或分布式锁来保护缓存,并设置合理的缓存过期时间,避免缓存数据同时失效,当缓存失效时,只允许一个请求去查询数据库,其他请求等待结果并从缓存获取。

  3. 缓存雪崩:设置缓存数据的过期时间时,可以引入随机因素,使得缓存不会同时失效,可以使用热点数据预加载、数据异步更新等策略,提前加载缓存数据,降低缓存同时失效的概率。同时,可以配置多级缓存、故障转移机制(如Redis Sentinel或Redis Cluster)等来提高缓存的可靠性和可用性。

通过上述措施,可以有效减少缓存穿透、缓存击穿和缓存雪崩对系统的影响,提高系统的性能和可用性。

标签:缓存,请求,数据库,击穿,缓存数据,雪崩,失效
From: https://www.cnblogs.com/shamo89/p/17510064.html

相关文章

  • vue组件动态缓存与动态刷新
    动态缓存前言在项目中,为了减少性能消耗,有时我们需要使用keep-alive把组件缓存起来,但是并不是所有组件都需要被缓存,那么如何控制那些组件需要缓存呢?主要使用到路由meta,路由前置守卫,vux,动态组件。实现APP.vue<scriptsetup>import{ref,computed}from'vue'import{useRo......
  • 缓存同步
    大多数情况下,浏览器查询到的都是缓存数据,如果缓存数据与数据库数据存在较大差异,可能会产生比较严重的后果。所以我们必须保证数据库数据、缓存数据的一致性,这就是缓存与数据库的同步。数据同步策略缓存数据同步的常见方式有三种:设置有效期:给缓存设置有效期,到期后自动删除。再......
  • MacOS 清除软件缓存和配置文件
    MacOS清除软件缓存和配置文件最近在mac上安装并激活软件的时候遇到问题,不论如何重新安装软件,软件都不会更新软件信息,推断需要删除软件的配置文件macos软件安装后,文件所在的路径在macos上,软件安装会将缓存等文件存放到如下可能的路径:Binaryanddockiconsarelocatedin/Ap......
  • ABP - 缓存模块(2)
    1.缓存模块源码解析个人觉得ABP分布式缓存模块有三个值得关注的核心点。首先是AbpRedisCache类继承了微软原生的RedisCache,并通过反射的方式获取RedisCache的私有方法对RedisCache进行扩展,实现了ABP分布式缓存中的批量操作方法。为什么要这么做呢?因为基于Redis缓......
  • 缓存的常见问题以及SpringCache的解决方案
    总体来说,缓存在使用的过程中主要面临以下几个问题:缓存击穿(某个热点数据的key失效了)缓存中无数据,但是数据库中有数据,由于是热点key,如果同一时间大量请求进来会导致数据库压力大增缓存雪崩与缓存击穿类似,只不过缓存雪崩是多个热点key同时失效缓存穿透查询不存在的数据,当同时......
  • 高并发下的缓存穿透
    高并发下的缓存穿透什么是缓存穿透大量并发去访问一个数据库不存在的数据,由于缓存中没有该数据导致大量并发查询数据库,这个现象要缓存穿透。缓存穿透可以造成数据库瞬间压力过大,连接数等资源用完,最终数据库拒绝连接不可用。如何解决缓存穿透对请求增加校验机制比如:课程......
  • 高并发下的缓存击穿
    高并发下的缓存击穿什么是缓存击穿缓存击穿是指大量并发访问同一个热点数据,当热点数据失效后同时去请求数据库,瞬间耗尽数据库资源,导致数据库无法使用。比如某手机新品发布,当缓存失效时有大量并发到来导致同时去访问数据库。如何解决缓存击穿使用同步锁控制查询数据库的......
  • 高并发下的缓存雪崩
    高并发下的缓存雪崩什么是缓存雪崩缓存雪崩是缓存中大量key失效后当高并发到来时导致大量请求到数据库,瞬间耗尽数据库资源,导致数据库无法使用。造成缓存雪崩问题的原因是是大量key拥有了相同的过期时间,比如对课程信息设置缓存过期时间为10分钟,在大量请求同时查询大量的......
  • 缓存与DB数据一致性问题解决的几个思路
    使用缓存必然会碰到缓存跟真实数据不一致的问题,虽然我们会在数据发生变化时通知缓存,但是这个延迟时间内必然会导致数据不一致,如何解决一般有下面几个思路:首先,当这个延迟如果在业务上时可以接受的,比如文章阅读、评论次数这样的缓存数据,这样的问题这里不考虑。 类似数据库分布式事务......
  • MyBatis 缓存
     MyBatis一级缓存1一级缓存原理在一次SqlSession中(数据库会话),程序执行多次查询,且查询条件完全相同,多次查询之间程序没有其他增删改操作,则第二次及后面的查询可以从缓存中获取数据,避免走数据库。 每个SqlSession中持有了Executor,每个Executor中有一个LocalCache。当用......