zoukankan      html  css  js  c++  java
  • 缓存穿透、缓存雪崩、缓存击穿的区别和解决方案

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

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

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

    解决方案
    (1)设置热点数据永远不过期。
    (2)加互斥锁。

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

    解决方案
    (1)缓存数据的过期时间设置随机,防止同一时间大量数据过期现象发生。
    (2)如果缓存数据库是分布式部署,将热点数据均匀分布在不同搞得缓存数据库中。
    (3)设置热点数据永远不过期。
    ————————————————
    版权声明:本文为CSDN博主「码农云帆哥」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
    原文链接:https://blog.csdn.net/sinat_27933301/article/details/88397480

  • 相关阅读:
    db2新添用户
    merge的用法
    oracle常用命令
    oracle建用户
    获得当前时间的PRO
    全部快捷方式图标变成LNK文件怎么办
    随机生成数据的三种方法
    db2查看表空间
    db2疑难解决
    AVG()和to_date()函数的使用
  • 原文地址:https://www.cnblogs.com/andydao/p/12897573.html
Copyright © 2011-2022 走看看