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.设置热点数据永不过期,或者有效期长点

    缓存降级:

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

  • 相关阅读:
    组装query,query汇总,query字段
    POJ 1276, Cash Machine
    POJ 1129, Channel Allocation
    POJ 2531, Network Saboteur
    POJ 1837, Balance
    POJ 3278, Catch That Cow
    POJ 2676, Sudoku
    POJ 3126, Prime Path
    POJ 3414, Pots
    POJ 1426, Find The Multiple
  • 原文地址:https://www.cnblogs.com/java-spring/p/10794347.html
Copyright © 2011-2022 走看看