zoukankan      html  css  js  c++  java
  • 缓存穿透、缓存击穿、缓存雪崩

    缓存雪崩

    缓存雪崩是指缓存同一时间大面积失效,所以后面的请求都会落在数据库上,造成数据库短时间内承受大量请求而崩掉。

    目前电商首页以及热点数据都会缓存,一般缓存都是定时刷新或者查不到之后更新缓存。定时任务刷新就会存在一个问题。假如,所有的缓存数据失效时间都是12个小时,中午12点刷新缓存,双十一零点会有大量用户涌入,假设每秒6000个请求,本来缓存可以抗下请求,但此时缓存中的key都过期了,此时6000个请求全部落在数据库上,直接宕机。

    解决方案:
    1、缓存数据的过期时间设置随机值,防止同一时间大量数据过期。
    2、缓存预热
    3、设置热点数据永不过期,有更新操作就更新缓存。
    4、互斥锁,保证只有一个线程访问数据库,其余都等待。

    缓存穿透

    缓存穿透指缓存和数据库中都没有数据,导致所有的请求都落在数据库上,造成数据库短时间内承受大量请求而崩掉。

    例如:数据库id是从1开始自增的,如果黑客大量访问id=-1的数据,这样不断攻击会导致数据库压力特别大,严重时会击垮数据库。

    解决方案:
    1、接口层增加校验,比如用户鉴权,参数校验,比如id<=0 直接拦截
    2、缓存获取不到数据,数据库也获取不到,这时可以在redis中缓存key-null,缓存有效时间可以设置短点。这样可以防止攻击者反复使用同一个id暴力攻击。
    3、采用布隆过滤器,将所有可能存在的数据哈希到一个足够大的bitmap中,一个一定不存在的数据一定会被bitmap拦截,从而避免对底层存储系统的查询压力。

    缓存击穿

    缓存击穿是指缓存中没有数据但数据库中有数据(一般是缓存时间到了),由于并发数量特别多,同时缓存没有读取到数据,就同时到数据库里面去拿数据。

    一个商品10点进行秒杀,但是10点的时候缓存恰好过期,这就导致所有的请求都走的数据库。

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

  • 相关阅读:
    TortoiseSVN和VisualSVN-下载地址
    asp.net mvc输出自定义404等错误页面,非302跳转
    IIS7如何显示详细错误信息
    关于IIS7.5下的web.config 404 配置的一些问题
    MVC 错误处理1
    后台获取视图对应的字符串
    HTML5 ArrayBuffer:类型化数组 (二)
    Web 前沿——HTML5 Form Data 对象的使用(转)
    HTML5 File 对象
    HTML5 本地裁剪图片并上传至服务器(转)
  • 原文地址:https://www.cnblogs.com/liuzhidao/p/14808655.html
Copyright © 2011-2022 走看看