缓存雪崩、缓存击穿、缓存穿透原因及解决办法
  diRvFkCA5Zb8 2023年11月01日 78 0

缓存雪崩是指在缓存中的大量数据在同一个时刻全部过期,导致原本这些可以由缓存中间件处理的高并发请求,一下子全部打到数据库,导致数据库服务器崩溃的一种现象。那么出现缓存雪崩的原因可以有①:缓存中间件宕机。②:缓存中大部分key都设置了相同的时间,导致这些key在同一时间内全部失效。解决的方法:

①:可以对这些个key设置可以失效的随机值,避免同时失效的问题。

②:还可以对数据库的读写加锁,不让那么瞬时高并发的请求一下子突然打到数据库上。

③:即使如果真的发生了缓存雪崩,使用数据库的主从复制、双主、读写分离等策略,数据库本身的容灾能力应该还是可以承受住的。

缓存穿透是指缓存穿透是指在使用缓存系统的应用程序中,恶意请求或者无效的请求频繁地访问缓存中不存在的数据,导致大量请求直接访问后端数据库或服务,而绕过了缓存系统的情况。可能出现的原因其实是可出现了恶意攻击行为。对于一个成熟的系统来说,由于缓存预热的不断加载,即便是出现了一个不存在的key,影响也不会很大,那么恶意攻击行为可能具有持久性,确认这个key在数据库中不存在,才会达到这样一个行为。解决的方法:

①:把这些无效的key保存到Redis里面,并设置一个null的特殊值,这样就不会去查数据库了。但是如果攻击者一直恶意攻击同样会出现相同的问题。

②:使用布隆过滤器来实现。把这些数据全部放到布隆过滤器里面,当进行查询时,先到布隆过滤器里面进行查询,如果查询不存在,那么这个key在数据库中肯定也不会存在,那么就不会去访问数据库了。

③:缓存预热,预先加载热点数据到缓存中,避免在某些特定时刻,高并发的请求打到数据库上。

缓存击穿是指当某个热点数据过期或被主动移除时,大量的并发请求同时访问该数据库,导致缓存无法命中,进而直接访问数据库或后端服务。对应的解决方案:

①:设置热点数据的永不过期策略:对于一些非常热点且不经常变动的数据,可以将其缓存设置为永不过期,确保数据一直存在于缓存中,避免了过期导致的击穿问题。

②:延迟缓存更新策略(缓存穿透):当发现某个缓存键对应的数据不存在时,可以采取一定的策略,如先访问数据库或后端服务获取数据,然后将数据写入缓存,避免了多个并发请求同时访问数据库。

③:布隆过滤器(Bloom Filter):布隆过滤器可以用于快速判断某个键是否存在于缓存中,如果布隆过滤器判断键不存在,则不会进一步访问缓存或数据库,从而减轻了缓存击穿的压力。

④:缓存预热(Cache Pre-warming):在系统启动或低峰期,预先加载热点数据到缓存中,使其在高峰期可用,从而避免了高并发请求直接访问数据库。

这里只列出来一小部分方案👀🤞

【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月08日 0

暂无评论

推荐阅读
  2Vtxr3XfwhHq   2024年05月17日   55   0   0 Java
  Tnh5bgG19sRf   2024年05月20日   110   0   0 Java
  8s1LUHPryisj   2024年05月17日   46   0   0 Java
  aRSRdgycpgWt   2024年05月17日   47   0   0 Java
diRvFkCA5Zb8