zoukankan      html  css  js  c++  java
  • 缓存穿透/击穿/雪崩/降级

    什么是缓存穿透?

    恶意用户模拟请求很多缓存和数据库中不存在的数据,导致这些请求短时间内直接落在数据库上,导致数据库异常,比如抢购、秒杀活动的接口被用户恶意刷,或者查询id为-1的数据。

    缓存穿透解决方案:

    1.增加校验,不符合基本查询数据规则的数据直接拦截,eg:id<=0的数据不让查询

    2.给该key设置默认值,可以设置为null,有效时间短一点,最多不超过5分钟

    什么是缓存击穿:

    指缓存中没有,数据库中有的一条数据(一般是缓存时间到期),这时查询这一条数据并发量比较大的话,会直接到数据库中取数据,造成数据库压力过大。

    缓存击穿解决方案:

    1.设置热数据有效时间加长,或者设置为永不过期

    2.加互斥锁,可以利用setnx给key加上锁,如果缓存中没数据,那么先尝试 获取锁(reetranLock.tryLock()),获取到了就从数据库中查询(然后 释放锁reetranLock.unLock()),获取不到就等待100ms,再次查询

    什么是缓存雪崩?

    指缓存中大量数据到了过期时间,此时查询量过大会落到数据库上,导致数据库压力过大。

    缓存雪崩解决方案:

    1.缓存数据随机设置过期时间,防止同一时间大量数据过期

    2.如果缓存数据库是分布式部署,将热点数据均匀分布在不同缓存数据库中

    3.设置热点数据永不过期,或者有效期长点

    缓存降级:

    就是在高并发高负载情况下,选择动态的关闭一下不重要的服务,拒绝访问,限流等,来为重要的服务节省资源,比如电商平台秒杀当天可以关闭推荐等功能。

  • 相关阅读:
    坚持的力量 第一篇
    有声似无声
    坚持的力量
    新浪技术面试题
    单词的个数
    我的研究生规划
    go to the train station
    百度面试题求绝对值最小的数
    关于CIW认证考试CIW 常见问题解答
    [恢]hdu 2087
  • 原文地址:https://www.cnblogs.com/java-spring/p/10794347.html
Copyright © 2011-2022 走看看