缓存异常场景
1. 缓存穿透
2. 缓存击穿
3. 缓存雪崩
4. 缓存预热
5. 缓存降级
缓存穿透:缓存穿透是指缓存和数据库都没数据,而用户不断发起请求,这时的用户很可能就是攻击者,攻击会导致数据库过大的压力
解决方案:
1)设置缓存空对象;
2)布隆过滤器
缓存击穿:缓存击穿是指缓存中没有但是数据库中有(一般是缓存时间到期),这时由于并发用户请求比较多,同时读缓存没有读到数据,又同时去数据库读取数据,引起数据库压力瞬间增大;
解决方案:
1)设置热点数据永不过期;
2)使用互斥锁排队;
3)缓存屏障;
缓存雪崩:缓存在同一时间内大量健的过期(失效),接着来的一大波请求瞬间都落在数据库中导致数据库连接异常
解决方案:
1)互斥锁排队;
2)缓存预热;
3)双层缓存策略(原始缓存,拷贝缓存)
缓存预热:缓存预热就是系统上线后,将相关的缓存数据直接加载到缓存系统,这样就可以避免用户请求时先查询数据库,然后在将数据存入缓存中
解决方案:
1)数据量不大的时候,工程启动的时候进行加载缓存动作;
2)数据量太大的时候,设置一个定时任务脚本,进行缓存的刷新;
3)数据量太大的时候,优先保证热点数据进行提前加载到缓存中;
缓存降级:降级的情况,就是缓存失效或者缓存服务挂机的情况下,我们也不去访问数据量,我们直接访问内存部分数据缓存或者直接访问默认的数据(熔断)
希望可以帮大家深入的了解缓存,更好解答