缓存穿透、缓存雪崩

1、缓存穿透

      访问一个不存在的key,缓存不起作用,请求会穿透到DB,流量大时DB会挂掉。

解决:

  1)采用布隆过滤器,使用一个足够大的bitmap,用于存储可能访问的key,不存在的key直接被过滤;
  2)拦截器,id<=0的直接拦截。
  3)从cache和db都取不到,可以将key-value写为key-null,设置较短过期时间,如30秒(设置太长会导致正常情况也没法使用)。这样可以防止攻击用户反复用同一个id暴力攻击

2、缓存雪崩
      大量的key设置了相同的过期时间,导致在缓存在同一时刻全部失效,造成瞬时DB请求量大、压力骤增,引起雪崩。

解决:

  (1)缓存数据的过期时间设置随机,防止同一时间大量数据过期现象发生。
  (2)如果缓存数据库是分布式部署,将热点数据均匀分布在不同搞得缓存数据库中。
  (3)设置热点数据永远不过期。

3、缓存击穿
      一个存在的key,在缓存过期的一刻,同时有大量的请求,这些请求都会击穿到DB,造成瞬时DB请求量大、压力骤增。

解决:

  (1)设置热点数据永远不过期。
  (2)加排它锁。

4、缓存预热

  新的缓存系统没有任何缓存数据,在缓存重建数据的过程中,系统性能和数据库负载都不太好,所以最好是在系统上线之前就把要缓存的热点数据加载到缓存中,这种缓存预加载手段就是缓存预热。

  

猜你喜欢

转载自www.cnblogs.com/bloghuang/p/10772223.html