K:缓存相关问题
缓存的作用在于提高程序的响应速度,一般用于程序存储运算所需数据或程序运算后的结果,以便再次访问或运算相同的程序(数据同样相同)时,能够得到快速的响应(适用于读多写少的场景)。在现代计算机体系结构中,根据多级存储体系的思想,为解决cpu运算速度与主存读取数据之间的速度不匹配问题,在cpu与主存之间便添加了多级缓存,用于存储部分经常使用到的数据,以此来提高响应速度。对于大容量存储设备—硬盘(磁盘)而言,主存同样可以看成是该设备的缓存。
在一个大型分布式系统中,为减轻数据库的压力,一般而言都会有一个专门的内存空间用于当做数据库部分热点数据的缓存。对于增加了缓存的程序,获取数据的流程一般而言按这样的逻辑进行的:
访问缓存,当缓存中存在所需数据时,直接返回数据,流程结束。否则进行步骤2
访问数据库,获取相应的数据进行运算并返回,同时将数据(数据库中拿出的数据或者运算后的结果)存入缓存中,流程结束
这两个步骤在不考虑高并发和缓存失效(数据过期/删除了缓存数据)的情况,是没有多大问题的。但是当考虑进这两个情况,缓存中没有相应数据时,便会出现缓存击穿和缓存穿透以及缓存雪崩的问题,下面便就这几个问题分别进行讨论,同时给出解决方法。
缓存穿透:
缓存穿透是指缓存和数据库中都没有相应的数据,而大量用户对不存在的数据进行请求访问,而导致所有请求都访问了数据库,让缓存“形若于无”的情况。
该问题会出现在用户删除了数据库中的相关数据后,删除缓存的场景中。也会出现在用户对系统的恶意请求中。
解决办法:
请求校验;在请求访问数据库之前,先校验请求参数的合法性。避免了非法参数访问数据库的情况(因为非法参数,如id=-1在数据库中是不存在的,为此每次请求都会导致访问数据库)
缓存空值;当访问了数据库中不存在的数据时,可以在缓存中设置对应数据为空值,这样后续访问该数据的请求就会被缓存所拦截而直接返回空值,从而减少对数据库的访问量。但需要注意的是,缓存时间应该设置得短一些,避免新增了数据之后,依然查询不到值的情况
缓存击穿:
缓存击穿是指缓存中没有相应的数据,数据库却中存在相应的数据。大量用户对该数据的请求直接访问了数据库造成的一种现象。
该问题会出现于更新了数据库中的数据之后去删除缓存的数据的场景中。也会出现于首次使用缓存,缓存中没有相关数据的场景中。同时也会出现在某个数据在缓存中失效过期的情况中。
解决方法:
缓存预热;在缓存启动时,可以对热点数据进行预加载处理。
加锁,重试;其中一个线程获取锁去访问数据库并将数据放置于缓存行中,另一些线程等待一段时间之后再重试获取缓存中的数据,当不存在时,再度竞争锁。
热点数据永不过时;不对热点数据设置过期时间,等到更新数据的时候,且下一次查询的时候,再更新数据。
缓存雪崩:
缓存雪崩是指缓存中的大量数据在短时间内失效,导致大量请求直接访问了数据库而导致的一种现象。其可以看成缓存击穿的一种泛化情况,缓存击穿是并发请求同一条失效数据,而缓存雪崩则是不同数据的数据均失效,应用大量请求数据库导致的。
解决方法:
随机延长数据的缓存时长;对缓存中被访问到的数据随机延长一定的失效时间,这样可以避免数据集中的在短时间内失效。
缓存进行分布式部署;对缓存做高可用的分布式部署,避免缓存出现单点故障问题导致缓存不可用而应用大量请求数据库。
限流、降级;当缓存雪崩发生时,为避免大量的请求访问数据库导致系统的不可用,可以采用限流和降级系统的方式,确保系统的可用。
总结:
缓存穿透和缓存击穿这个两个名词有点相近,乍一看不容易辨别,也容易搞混淆,但细细一想其实还是很容易分辨的。缓存穿透和缓存击穿的共同点是缓存中没有相应的数据,而不同点在于缓存穿透在数据库中是没有相应的数据。而对于缓存雪崩,其实际上就是缓存击穿的一种泛化,缓存击穿是针对某一个缓存项失效而言的,而缓存雪崩是针对大量缓存项的。
ps:这篇文章最主要的目的是对上一篇文章中关于缓存使用可能会出现的相关问题的总结。通篇是理论有关的内容,在此仅做个记录。
这个是本人的公众号,致力于写出绝大部分人都能读懂的技术文章。欢迎相互交流,我们博采众长,共同进步。

K:缓存相关问题的更多相关文章
- 《前端之路》之 Cookie && localStorage && Session Storage 缓存相关
08: Cookie && localStorage && Session Storage 缓存相关 客户端.前端 存储 一. 起 因 首先解释下为什么想来写这个关于前 ...
- 浏览器缓存相关http头
近期看雅虎黄金34条,学习下优化站点性能的方法. 当中有一条:"为文件头指定Expires或Cache-Control",详细来说指对于静态内容:设置文件头过期时间Expires的 ...
- SPSS-Friedman 秩和检验-非参数检验-K个相关样本检验 案例解析
三人行,必有我师,是不是真有我师?三种不同类型的营销手段,最终的营销效果是否一样,随即区组秩和检验带你进入分析世界 今天跟大家讨论和分享一下:spss-Friedman 秩和检验-非参数检验-K个(多 ...
- Java缓存相关memcached、redis、guava、Spring Cache的使用
随笔分类 - Java缓存相关 主要记录memcached.redis.guava.Spring Cache的使用 第十二章 redis-cluster搭建(redis-3.2.5) 摘要: redi ...
- Django的contenttypes应用、缓存相关
一.django的contenttypes contenttypes 是Django内置的一个应用 , 可以追踪项目中所有app 和 model 的对应关系, 并记录djang_content_typ ...
- http中有关缓存相关的几个字段
转载自:http://blog.csdn.net/lifeibo/article/details/5979572 Expires.Cache-Control.Last-Modified. ETag是R ...
- MySQL的Innodb缓存相关优化
MySQL的Innodb缓存相关优化 INNODB 状态的部分解释 通过 命令 SHOW STATUS LIKE 'Innodb_buffer_pool_%' 查看 Innodb缓存使用率 (I ...
- contenttype应用 , 缓存相关
一. Django的contenttypes contenttypes 是Django内置的一个应用,可以追踪项目中所有 app和model 的对应关系,并记录在 django_content_typ ...
- 网页缓存相关的HTTP头部信息详解
前言 之前看完了李智慧老师著的<大型网站技术架构-核心原理与案例分析>这本书,书中多次提起浏览器缓存的话题,恰是这几天生产又遇到了一个与缓存的问题,发现自己书是没少看,正经走心的内容却不多 ...
随机推荐
- 「NOIP 2017」列队
题目大意:给定一个 $n times m$ 的方阵,初始时第 $i$ 行第 $j$ 列的人的编号为 $(i-1) times m + j$,$q$ 次给出 $x,y$,让第 $x$ 行 $y$ 列的人 ...
- Fetch API与POST请求那些事
简述 相信不少前端开发童鞋与后端联调接口时,都会碰到前端明明已经传了参数,后端童鞋却说没有收到,尤其是post请求,遇到的非常多.本文以node.js作为服务端语言,借用express框架,简要分析客 ...
- 前端面试题(HTML、CSS部分)
HTML.CSS部分: 一.html5有哪些新特性.移除了那些元素?如何处理HTML5新标签的浏览器兼容问题?如何区分 HTML 和 HTML5? 新特性: HTML5 现在已经不是 SGML 的 ...
- Tomcat服务自动启动以隐藏start.bat命令窗口
该方法注意先要配置好CATALINA_HOME和path等环境变量.接着主要命令有:cmd命令符下进入tomcat/bin目录,输入:service.bat install (自定义的tomcat版本 ...
- Jave基本数据类型
基本类型,或者叫做内置类型,是JAVA中不同于类的特殊类型.它们是我们编程中使用最频繁的类型,因此面试题中也总少不了它们的身影,在这篇文章中我们将从面试中常考的几个方面来回顾一下与基本类型相关的知识. ...
- Java 抽象类 抽象方法 使用说明
知识点 什么是抽象类 抽象类与普通类主要两点不同: 1.在类的修饰符后面多了一个abstract关键字 2.抽象类是不允许通过new来实例化的 由于抽象类不能通过new来实例化,所以基本上是在继承中当 ...
- MATLAB神经网络(4) 神经网络遗传算法函数极值寻优——非线性函数极值寻优
4.1 案例背景 \[y = {x_1}^2 + {x_2}^2\] 4.2 模型建立 神经网络训练拟合根据寻优函数的特点构建合适的BP神经网络,用非线性函数的输入输出数据训练BP神经网络,训练后的B ...
- Logitech k480 蓝牙键盘连接 ubuntu 系统
k480 能同时连接三台蓝牙设备,支持 Windows.Android.Chrome.Mac OS X 和 iOS 系统.奈何官方并不支持 Ubuntu. 有压迫就有反抗,呃...,不对,总是有办法在 ...
- 详解如何快速使用数据可视化BI软件创建医疗运营监控数据中心大屏
灯果数据可视化BI软件是新一代人工智能数据可视化大屏软件,内置丰富的大屏模板,可视化编辑操作,无需任何经验就可以创建属于你自己的大屏.大家可以在他们的官网下载软件. 本文以医疗运营监控数据中心大屏 ...
- ico制作工具
因为要满足不同尺寸的图标很多网站生成的ico都是单一尺寸的无法满足特殊要求因此推荐一个ICO制作工具 Axialis IconWorkshop 6.91 下载:https://www.axialis. ...