美文网首页
缓存穿透,缓存击穿,缓存雪崩解决方案分析

缓存穿透,缓存击穿,缓存雪崩解决方案分析

作者: 7d972d5e05e8 | 来源:发表于2020-09-24 11:05 被阅读0次

    参考文章:https://blog.csdn.net/zeb_perfect/article/details/54135506

    一、缓存穿透

    重点在,透过缓存,直接读取数据库。什么场景下会出现这种情况呢?
    查询不存在的值,是可能出现穿透的。

    这种情况大概率是攻击者

    解决方案:
    1、缓存空值,但是一定要设置过期时间,且过期时间要短一些。
    2、布隆过滤器。构造全量数据的布隆过滤器,对于不存在的key,有可能查询出来为1。但是查询出来不为1的key,是一定不存在的,可以直接过滤,无需查询DB。

    二、缓存击穿

    重点在“击”和“穿”,现象也是流量都打到DB上了。但是,它并不是查询不存在的值引起的。而是由于某个key恰好失效了,这个时候恰好高并发请求过来。这种情况一般出现在热点key上,用户又恰好同时访问这个热点key。导致,并发请求都打到DB上。

    解决方案:
    1、热点key,最好不要设置过期时间。由后台线程异步定时刷新,可能实时性差一点,但是性能好。
    2、过期后,去数据拿数据的时候做一下控制。用分布式锁控制下去DB拿相同key的请求,这种解决方案只适用击穿,就是只能是同一个key,才能控制并发。

    三、缓存雪崩

    重点在雪崩,意思是大量不同key,都打到DB上。一般出现在大量key,在同一时间点过期,导致请求这些key同时打到DB上。

    这个时候,就不能像上面采用锁在控制并发了。因为请求的是不同key,锁不住。

    解决方案:
    1、key的过期时间,不要在同一个时间,尽量随机。
    2、请求排队,相当于削峰。缺点是实时性受影响。

    相关文章

      网友评论

          本文标题:缓存穿透,缓存击穿,缓存雪崩解决方案分析

          本文链接:https://www.haomeiwen.com/subject/zljzyktx.html