一.缓存穿透:访问一个缓存和数据库都不存在的key,此时会直接打到数据库,并且查不到数据,没办法写缓存,所以下一次仍然打到数据库上;这样的话,缓存起不到作用,流量大时会直接导致数据库扛不住挂掉;
解决方案:
1.接口校验,正常情况下不会出现这种情况,例如被爬虫这种非法攻击会出现;为了避免,就可以在最外层做个校验保护,例如用户鉴权、数据合法性校验等;例如查询商品ID,ID为正整数,则可以对非正整数进行过滤;
2.缓存空值,当访问缓存和DB都没有查到数值时,可以将该控制写入缓存,可以设置较短的过期时间;
3.使用布隆过滤器,使用布隆过滤器存储说有可能访问的key,不存在的直接过滤掉;存在的key则在进入查询缓存和数据库
二、缓存击穿:当一个热点key,在缓存过期的一瞬间,有大量的请求访问,会直接打到数据库,造成瞬间数据库承受的压力很大,甚至打垮数据库;
解决办法:
1.加互斥锁
2.热点数据设置不过期
三、缓存雪崩:大量的热点数据设置相同的过期时间,失效后,大量的请求直接打到数据库,数据压力聚增,瞬间雪崩
解决方法:
1.加互斥锁
2.热点数据不过期
3.热点数据设置不同的过期时间【过期时间打散】