1.缓存雪崩了解吗

​ Redis中数据同一时刻大面积失效,那一瞬间Redis和没有一样,此时如果存在大量请求,会直接打到MySql数据库上,MySql数据库会瘫痪,无法提供服务,整个系统就崩掉了。

如何应对呢?

​ 处理缓存雪崩很简单,在批量往Redis存数据的时候,把每个key的失效时间加个随机值就好了,保证数据在同一时刻不会大面积失效,数据库负担过重。

1
setRedis(Key,value,time + Math.random() * 10000);

​ 如果Redis时集群部署,可以将热点数据均匀分散到各个Redis库中,避免全部失效。

​ 也可以设置热点数据永不过期,更新时覆盖即可。

2.缓存穿透、击穿

​ 缓存穿透是指缓存和数据库中都没有的数据,而用户在不断的发送请求。此时的用户很有可能是攻击者,会导致数据库压力过大。(先查缓存,没有就去数据库查)

如何解决呢?

  • 增加校验,拦截不合理的请求。

  • 从缓存和数据库都取不到的数据,可以在缓存中添加key对应valu为null的一条数据,有效时间可以设置短点

​ 缓存击穿和缓存雪崩类似,但有点不同。缓存击穿指的是有一个key非常热点,在不停的扛着大并发,在该key失效的一瞬间,会有大量请求击穿缓存打到数据库,导致数据库负担过重。

如何解决呢?

  • 设置热点数据永不过期
  • 加上互斥锁