缓存数据库的第一防线,防止数据访问频繁而崩溃,十分重要
缓存穿透 缓存击穿 缓存雪崩 -本质都是前台透过缓存直接访问数据库而导致的一系列效应
缓存穿透(重点在于透字,透过缓存直接访问数据库)
数据库查询结果为空,则不加缓存,导致缓存穿透。
-若恶意程序故意访问为空的数据,或高并发下访问为空的数据,由于不设缓存,导致直接访问数据库,造成数据库压力过大,从而崩溃
-解决方法:对数据库的空值结果也加缓存,但设置过期时间,时间可以设置短点,有效阻止短时间的大量访问,并数据同步效果较好
缓存雪崩
大量缓存数据同一时间过期,导致数据库压力过大,而崩溃
-缓存过期时间相近,而此时访问量过多,导致缓存雪崩
-解决方法:每个不同类型的key尽量设置不同时间
缓存击穿 (重点在于穿字,击穿缓存,出现场景极小)
高频大量访问热点缓存数据,若缓存一瞬间失效,直接击穿缓存屏障,访问数据库,导致缓存击穿
-所有缓存思路基本都设置了过期时间,时间一到再去数据库查询数据,但若是在这一瞬间,高频大量的线程进来,将导致数据库崩溃
-解决方法:1-同步机制,损失并发性,提高性能,比较好的是双检锁;2-热点数据之间存储在缓存中,而不入库(或异步入库),之间缓存交互