zoukankan      html  css  js  c++  java
  • Java微服务:缓存穿透和缓存雪崩

    Java微服务:缓存穿透和缓存雪崩

    缓存穿透

      缓存是对数据库的一道保护墙,缓存穿透就是冲破了我们的保护墙。即调用方传来的永远都是我们缓存中不存在的Key,这样每次都需要去数据库中查询一次,当大量这样的请求过来时,瞬时数据库的压力会很大,相当于没用到缓存,同时还增加了去缓存中查找数据的时间,这就是所谓的缓存穿透。

    解决方案

    • 将该Key缓存下来,以便下次走缓存。但是恶意估计下,Key肯定不固定,该方案没用。
    • 根据Key的规则做一些过滤,判断Key的合法性,不合法直接返回默认值。这种方案可以解决一部分问题,使用场景较少。
    • 通过布隆过滤器实现对缓存的校验。

    缓存雪崩

      缓存雪崩指的是,大量缓存同一时间失效,这样所有的请求都会直接去查询数据库,导致数据库压力过大,然后挂掉的情况。

    注:缓存穿透也可以导致缓存雪崩的发生,但是根本原因不一样,所以两个概念不能混用!

      缓存雪崩乐观情况下是存储层能抗住,但是用户体验会受到影响,数据返回慢,当压力过大时会导致存储层直接挂掉,整个系统直接挂掉。对于要做到99.99%高可用的产品,是绝对不允许出现缓存雪崩的现象。

    解决方案

    • 缓存存储高可用,比如Redis集群。
    • 缓存失效时间设置好,避免同一时间失效。
    • 热点数据,定时更新,避免自动失效。
    • 服务限流和接口限流。
    • 对数据库查询做优化,下策为加锁,可以避免数据库挂掉。

    参考资料

    • 《Spring Cloud微服务 入门、实战与进阶》
  • 相关阅读:
    Jquery的小案例4、实现表单的验证(用户名和邮箱)
    Ubuntu下安装Python
    ListView列宽自适应
    IPtables 版本升级到 v1.4.9
    穿过已知点画平滑曲线(3次贝塞尔曲线)
    贪心算法——NY 14 会场安排问题
    零是奇数还是偶数?
    免费淘宝IP地址库简介及PHP/C#调用实例
    html锚点(mao dian)特殊的超链接
    怎么查看自己电脑的IP地址
  • 原文地址:https://www.cnblogs.com/MrSaver/p/13202669.html
Copyright © 2011-2022 走看看