缓存技术可以用来减轻数据库的压力,提升访问效率。目前在企业项目中对缓存也是越来越重视。但是缓存不是说随随便便加入项目就可以了。将缓存整合到项目中,这才是第一步。而缓存带来的穿透问题,进而导致的雪蹦问题都是我们迫切需要解决的问题。本篇文章将我平时项目中的解决方案分享给大家,以供参考。 一、缓存穿透的原理缓存的正常使用如图:
如图所示,缓存的使用流程: 1、先从缓存中取数据,如果能取到,则直接返回数据给用户。这样不用访问数据库,减轻数据库的压力。 2、如果缓存中没有数据,就会访问数据库。 这里面就会存在一个BUG,如图:
如图,缓存就像是数据库的一道防火墙,将请求比较频繁的数据放到缓存中,从而减轻数据库的压力。 但是如果有人恶意攻击,那就很轻松的穿透你的缓存,将所有的压力都给数据库。比如上图,你缓存的key都是正整数,但是我偏偏使用负数作为key访问你的缓存,这样就会导致穿透缓存,将压力直接给数据库。 二、导致缓存穿透的原因缓存穿透的问题,肯定是再大并发情况下。依此为前提,我们分析缓存穿透的原因如下: 1、恶意攻击,猜测你的key命名方式,然后估计使用一个你缓存中不会有的key进行访问。 2、第一次数据访问,这时缓存中还没有数据,则并发场景下,所有的请求都会压到数据库。 3、数据库的数据也是空,这样即使访问了数据库,也是获取不到数据,那么缓存中肯定也没有对应的数据。这样也会导致穿透。 三、解决缓存穿透缓存穿透在于一步步规避穿透的原因,如图:
如上图所示,解决的步骤如下:
(责任编辑:yang) |