深入理解缓存击穿、缓存雪崩和缓存穿透:概念、影响和解决方案
2024.02.18 11:51浏览量:125简介:本文将深入探讨缓存击穿、缓存雪崩和缓存穿透的概念、产生的原因、对系统的影响以及如何解决这些问题。通过了解这些知识,读者可以更好地理解和解决在实际应用中遇到的缓存相关问题,提高系统的稳定性和性能。
千帆应用开发平台“智能体Pro”全新上线 限时免费体验
面向慢思考场景,支持低代码配置的方式创建“智能体Pro”应用
一、缓存击穿
缓存击穿是指当用户在网络应用或网站上执行一个查询或请求时,如果查询的数据不存在于缓存当中,则缓存系统会向后端服务发出请求以检索本次请求所需要的数据。若此时网站突然请求大量来自同一个key的数据,会造成大量请求在瞬间穿透缓存,直接落入后端查询逻辑,从而造成系统负载暴增,产生大量“慢查询”,又称为“雪崩”现象。 缓存击穿是一种容易导致复杂网络应用程序卡住的常见问题,发生缓存雪崩时,主要影响的是系统的可用性。同时,由于一些受攻击的key的请求落入到数据库,磁盘负载大幅增加,容易引发系统崩溃。此外,缓存击穿还可能导致服务器发生内存溢出、文件损坏等现象,所以应对缓存击穿对现有业务是至关重要的。
二、缓存雪崩
缓存雪崩是指缓存由于某些原因(比如 宕机、cache服务挂了或者不响应)整体crash掉了,导致大量请求到达后端数据库,从而导致数据库崩溃,整个系统崩溃,发生灾难。 雪崩的简单过程: 1、redis集群彻底崩溃 2、缓存服务大量对redis的请求hang住,占用资源 3、缓存服务大量的请求打到源头服务去查询mysql,直接打死mysql 4、源头服务因为mysql被打死也崩溃,对源服务的请求也hang住,占用资源 5、缓存服务大量的资源全部耗费在访问redis和源服务无果,最后自己被拖死,无法提供服务 6、nginx无法访问缓存服务,redis和源服务,只能基于本地缓存提供服务,但是缓存过期后,没有数据提供 7、网站崩溃。通俗来讲:就像雪崩一样 你一个雪块砸了下来 是不是剩下的都会持续下落 造成一种雪崩 导致这种现象可能的原因: 1、例如 “缓存并发”,“缓存穿透”,“缓存颠簸” 等问题,这些问题也可能会被恶意攻击者所利用。 2、例如 某个时间点内,系统预加载的缓存周期性集中失效了。解决方法:可以通过设置不同的过期时间,来错开缓存过期,从而避免缓存集中失效。
三、缓存穿透
缓存穿透是指查询一个一定不存在的数据。正常的使用缓存流程大致是,数据查询先进行缓存查询,如果key不存在或者key已经过期,再对数据库进行查询,并把查询到的对象,放进缓存。如果数据库查询对象为空,则不放进缓存。 中文名 缓存穿透 产生影响 可能被利用这个漏洞,对数据库造成压力,甚至压垮数据库。 解决方案: 1 对url中的key id值进行对称加密,不能轻易暴露出真实的key值,防止黑客攻击。2 不管数据实际上存不存在,我们都把这个键存到缓存中(有效期设置的短一些,比如一分钟到三分钟),然后值设置为一个特定值,业务中如果获取到的结果是这个特定值,则报错返回。
总的来说, 在实际的应用中, 针对这些可能出现的问题, 我们都需要提前做好预防和准备, 以保证我们的系统能够稳定运行。同时, 对于这些问题, 我们也需要不断地学习和研究, 以更好地理解和解决它们。

发表评论
登录后可评论,请前往 登录 或 注册