缓存技术可以用来减轻数据库的压力,提升访问效率。目前在企业项目中对缓存也是越来越重视。但是缓存不是说随随便便加入项目就可以了。将缓存整合到项目中,这才是第一步。而缓存带来的穿透问题,进而导致的雪蹦问题都是我们迫切需要解决的问题。本篇文章将我平时项目中的解决方案分享给大家,以供参考。
一、缓存穿透的原理
缓存的正常使用如图:
如图所示,缓存的使用流程:
1、先从缓存中取数据,如果能取到,则直接返回数据给用户。这样不用访问数据库,减轻数据库的压力。
2、如果缓存中没有数据,就会访问数据库。
这里面就会存在一个BUG,如图:
如图,缓存就像是数据库的一道防火墙,将请求比较频繁的数据放到缓存中,从而减轻数据库的压力。 但是如果有人恶意攻击,那就很轻松的穿透你的缓存,将所有的压力都给数据库。比如上图,你缓存的key都是正整数,但是我偏偏使用负数作为key访问你的缓存,这样就会导致穿透缓存,将压力直接给数据库。
二、导致缓存穿透的原因
缓存穿透的问题,肯定是再大并发情况下。依此为前提,我们分析缓存穿透的原因如下:
1、恶意攻击,猜测你的key命名方式,然后估计使用一个你缓存中不会有的key进行访问。
2、第一次数据访问,这时缓存中还没有数据,则并发场景下,所有的请求都会压到数据库。
3、数据库的数据也是空,这样即使访问了数据库,也是获取不到数据,那么缓存中肯定也没有对应的数据。这样也会导致穿透。
三、解决缓存穿透
缓存穿透在于一步步规避穿透的原因,如图:
如上图所示,解决的步骤如下:
1、再web服务器启动时,提前将有可能被频繁并发访问的数据写入缓存。—这样就规避大量的请求在第3步出现排队阻塞。
2、规范key的命名,并且统一缓存查询和写入的入口。这样,在入口处,对key的规范进行检测。–这样保存恶意的key被拦截。
3、Synchronized双重检测机制,这时我们就需要使用同步(Synchronized)机制,在同步代码块前查询一下缓存是否存在对应的key,然后同步代码块里面再次查询缓存里是否有要查询的key。 这样“双重检测”的目的,还是避免并发场景下导致的没有意义的数据库的访问(也是一种严格避免穿透的方案)。
这一步会导致排队,但是第一步中我们说过,为了避免大量的排队,可以提前将可以预知的大量请求提前写入缓存。
4、不管数据库中是否有数据,都在缓存中保存对应的key,值为空就行。–这样是为了避免数据库中没有这个数据,导致的平凡穿透缓存对数据库进行访问。
5、第4步中的空值如果太多,也会导致内存耗尽。导致不必要的内存消耗。这样就要定期的清理空值的key。避免内存被恶意占满。导致正常的功能不能缓存数据。
redis,缓存穿透
更新日志
- 钱昭颖.2022-KNOWING【环星】【WAV分轨】
- 煲机极品《炸10Hz》[WAV分轨][550M]
- 《蔡琴127首单曲合集》单曲100M极品音质[WAV分轨][15G]
- 任贤齐《爱像太平洋/跨海三部曲》 2CD [WAV][561M]
- 欢乐钓鱼大师如何获得双倍经验 欢乐钓鱼大师获得双倍经验方法
- 物华弥新迷踪盘第二十关怎么过 迷踪盘第二十关通关方法
- 物华弥新迷踪盘第二十一关怎么过 迷踪盘第二十一关通关方法
- KOKIA-TokyoMermaid(2018mora)[96-24]flac
- VariousArtists《世界著名古典大师名版收藏15CD》古典音乐[FLAC+CUE]
- 群星《一人一首成名曲(滚石24K金碟珍藏版)》WAV
- 无处不在的DOOM!新Mod允许在《P5》中玩毁灭战士
- 岛哥哥人气爆棚!亮相漫展COS区引大量粉丝火速围观
- 虚幻5.4引擎技术演示超逼真!4080无法达到4K/60帧
- 陈冠希.2002-TRANSITION(国)【英皇娱乐】【WAV+CUE】
- 吴奇隆.2016-旅程【太阳动力】【WAV+CUE】