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

    缓存降级:

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

  • 相关阅读:
    【iOS】7.4 定位服务->2.1.1 定位
    【iOS】7.4 定位服务->1.0 简介
    1.2.1 OC概述
    5.1 网络基础
    4.4 多线程进阶篇<下>(NSOperation)
    4.3 多线程进阶篇<中>(GCD)
    4.1/4.2 多线程进阶篇<上>(Pthread & NSThread)
    4.0 多线程基础篇
    2.1 -1.0 Xcode(发布时间、使用、快捷键、插件相关)
    一款面试复习应用源码
  • 原文地址:https://www.cnblogs.com/java-spring/p/10794347.html
Copyright © 2011-2022 走看看