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

    1、缓存穿透
    概念:
    查询一个必然不存在的数据,则缓存中不存在,之后会去查询数据库。如果有大量这样的数据查询,则会导致数据库压力过大,进而可能导致数据库挂掉。这个漏洞可以被用来恶意攻击,压垮数据库。
    解决方案:
    (1) 对于在数据库中查询是空的情况,仍然进行缓存。只是时间设置短一点,比如正常数据缓存一周,查询是空的数据缓存10分钟。
    (2) 对一定不存在的key进行过滤。可以把所有的可能存在的key放到一个大的Bitmap中,查询时通过该bitmap过滤。

    2、缓存雪崩
    概念:
    缓存雪崩是指在我们设置缓存时采用了相同的过期时间,导致缓存在某一时刻同时失效,请求全部转发到数据库,数据库瞬时压力过重崩溃。比如
    解决方案:
    可以在原有的失效时间基础上增加一个随机值,比如1-5分钟随机,这样每一个缓存的过期时间的重复率就会降低,就很难引发集体失效的事件。

    3、缓存击穿
    概念:
    缓存在某个时间点过期的时候,恰好在这个时间点对这个Key有大量的并发请求过来,这些请求发现缓存过期一般都会从后端DB加载数据并回设到缓存,这个时候大并发的请求可能会瞬间把后端DB压垮。(这个和缓存雪崩的区别在于缓存击穿针对某一key缓存,缓存雪崩是很多key)
    解决方案:
    1、使用互斥锁(mutex key),就是在缓存失效的时候,不立即去查询数据库,而是先使用缓存工具的某些带成功操作返回值的操作(比如Redis的SETNX或者Memcache的ADD)去set一个mutex key,当操作返回成功时,再查询数据库并设置缓存,之后再清掉互斥锁;如果查询到互斥锁已存在,则等待后再查询。
    2、热点数据永不过期。不设置过期时间,也可以后台任务构建缓存。

  • 相关阅读:
    在ubuntu环境安装youcompleteme
    OSX 升级 vim
    ubuntu 14.04 与 CentOS 升级GCC/G++至5版本
    wget https://github.com/xxx/yyy/archive/${commit_hash}.zip
    机器学习笔记(photo OCR)
    机器学习笔记(十)大型数据集的学习
    机器学习笔记(九)推荐系统
    机器学习笔记(八) 异常检测
    机器学习笔记(七)聚类算法(k均值,降维)
    机器学习笔记(六)支持向量机SVM
  • 原文地址:https://www.cnblogs.com/dayang12525/p/11582589.html
Copyright © 2011-2022 走看看