web缓存概述
缓存无处不在,所展示出的仅仅是服务器端的缓存,我们从细节层面一层层分析
但是在此之前,我们先要知道什么是缓存与为什么要使用缓存,是时候百度一波喽~
缓存就是数据交换的缓冲区(称作Cache),当某一硬件要读取数据时,会首先从缓存中查找需要的数据,如果找到了则直接执行,找不到的话则从内存中找。由于缓存的运行速度比内存快得多,故缓存的作用就是帮助硬件更快地运行。
当然缓存不仅限于存储在内存当中,所以我们可以理解成将数据存储在快介质中并优先在快介质中查找
so,缓存的好处显而易见了,那就是查询速度变快,并且不再进行之后的io操作了,合理的使用缓存可以极大的提升吞吐量,从而的好良好的性能!但是缺点也很明显那就是成本问题,一个简单的例子就是我们都知道固态盘比机械盘贵好几倍,当然我说的是企业级的固态盘,听说最近intel新出了一款黑科技固态盘速度已经可以干内存了,但是容量是不到150G而价格简直是天价,不过相信随着科技的不断提升,固态盘变成主流的时间不会太远
下面是现在主流介质的速度排列,容量早提升了可以忽略
其中寄存器是在cpu内的,有兴趣的可以看看计算机硬件方面的知识,高速缓存也就是L2级缓存,也是硬件方面的,intel的cpu之间是共享高速缓存的,而AMD则是每个cpu单独维护各自的高速缓存,so,AMD之间在保持高速缓存一致性上有极大的困难;当然图中每一层又可以细分出各自的速度比,好比磁盘ssd跟机械盘的速度那就差很多
再说一个题外话那就是Buffe与Cache的区别,最简单地说
Buffe是为了写,是写缓冲
Cache是为了读,是读缓存
好了,这里我们的缓存就是Cache了,我们从一个请求的开始分析
一.客户端本身的缓存
客户端访问页面后第一步就是去解析我们的域名,在正常情况下不配置hosts文件时都会去访问设置的dns服务器,然后获取解析出的ip,然后访问此ip,这时候才开始与我们的服务器开始真正开始进行通讯,然后获取我们提供的页面进行后续操作
在这些流程中,如果我之前访问过该网站,那么又会如何呢?
1.首先浏览器会从自己的缓存中读取dns,看看有木有,不同的浏览器过期时长不同,然后还有客户端本身操作系统也会看看自己是否开启了dns缓存,然后去验证,还有就是我们服务端的语言也是可以在访问页面时给客户端写缓存的
2.如果都没有的话,我们就去dns服务器解析吧,dns服务器也分很多种,也许我们访问dns服务器就是一台缓存dns,他其实本身不解析,就是记缓存,如果有此缓存就会直接返回,如果没有,一般就会去递归长训返回了
3.Ok,到此我们终于拿到了正确的目标ip了,我们与该ip进行连接拿页面啦~但是页面上有三类内容,html、css、js,而且还有好多的外部链接指向图片啊,uri啊,甚至还有ifname,这些内容我们也都要请求一遍嘛?如果我们是首次访问,那么很可惜,答案是肯定的,我们需要全部访问一遍,不过随着技术的发展,前端技术有异步加载及惰性加载,我们现在只需要加载并访问下载一些必须的内容了
4.但是如果我们访问过呢?那么这里面信息量又变大了呦~~~~5555555555,开车了!老司机光顾那肯定是轻车熟路的嘛,各种套餐的价格早已做到了心中有数,就不需要再多要一份了,但是我们都知道现在生意竞争激烈,大家都喜欢提供各种时价的跟特殊优惠,这种我们就必须要每次取一份, 但是如何分辨出哪些需要取的哪些是不需要的呢?那在套餐前面加一个标签不就好了么,但是这个标签是什么,每家的规矩都是不同的,但是还是可以总结成四种
Etag:打标签,如果标签没变那就不需要去取了
过期时间:告知此资源什么时候过期,那么在此之前那就不用取了
Last-modified:根据此文件的最后修改时间判断,如果时间没变那就是没修改就不用取了
前端技术:直接在html里添加<link>标签
最后总结下~
二.代理层的缓存
历经千辛万苦终于连接到了服务器,好开心,23333333,你太天真了,一边情况下你根本没有连接到服务器!wtf,那我tm刚才都干了些什么,现在我看到的资源是哪个王八蛋提供的?
答案是cdn厂商,随着时间的推移,现在大家都可以用到cdn了,这对中小型企业十分友好,cdn的知识也很深奥,各家厂商也各有特色,不过多描述,直接总结下cdn为我们做的事情
- 提供就近访问
- 缓存热点数据
- 安全防护
- 智能dns
- 应用层技
- 各厂商特色服务
哈哈哈哈,北方对自己的的ps的技术简直无语了~~~~
三.web层缓存
这次我们终于真正意义上的抵达了服务商的服务器,姆Q~~~
服务器需要对我们的操作进行解析,然后发送数据给后端,后端有各自的业务代码来处理我们的各类请求,我们都知道语言有很多,大体分为解释性语言跟编译性语言,那么为了提升我们代码的速度,我们是不是对可以做一些缓存优化呢?答案是要根据语言而论的,像php我们就可以打开opcache,但是像Python就没有什么好做的了
其实我们的web服务器上本身也是可以开启缓存的哦,如apache的mod_cache模块与Nginx的fastcgi缓存
四.应用层缓存
我们提供的页面有的数据是需要变化的,有的是静态的,有的是从数据库内获取然后返回前端展示的,因此我们尽量要将页面做的静态化,因为这样数据才可以被缓存下来,如果是一直在变那么缓存了也没有意义了
五.数据层缓存
这一层用户就已经感知不到了,因为这已经是服务器内部之间的交互了
常规情况下我们将数据放置在mysql中,首先mysql服务层有缓存,然后Mysql不同的引擎带有各自的缓存,dba应该比较了解,小北方对数据库很不熟悉,就不班门弄斧了
再者就是分布式缓存服务器,redis用的比较多,组件一个集群缓存热点数据,应用程序会调用对应的库去操作它进行存储获取数据操作,它本身就是缓存服务器,为的就是提升数据获取的速度。
六.系统层
这一层的缓存主要就是内存了嘛,内存出现的意义就是因为cpu与磁盘之间速度的不对等,所以需要一层过渡层
再就是cpu内部的缓存,L1、L2、L3级缓存
七.物理层
物理层的设备有什么缓存?
其实我们的raid卡上是带有缓存的,而且还自带小电池你敢信?默认情况下是关闭的
再就是磁盘本身也有一些缓存,只是这个数值实在是太小了,因此我们一般不开
题外话就是有些服务器只识别raid设备,所以单盘我们就直接做个raid0就好,其实ssd不建议做raid,更建议作为日志盘来,其实就是写缓冲来平衡机械盘的速度,因为我们写文件落盘是要先到日志盘再到底层盘
web缓存概述的更多相关文章
- [转载]WEB缓存技术概述
[原文地址]http://www.hbjjrb.com/Jishu/ASP/201110/319372.html 引言 WWW是互联网上最受欢迎的应用之一,其快速增长造成网络拥塞和服务器超载,导致客户 ...
- Web缓存杂谈
一.概述 缓存通俗点,就是将已经得到的‘东东’存放在一个相对于自己而言,尽可能近的地方,以便下次需要时,不会再二笔地跑到起始点(很远的地方)去获取,而是就近解决,从而缩短时间和节约金钱(坐车要钱嘛). ...
- Web缓存杂谈--Etag & If-None-Match
一.概述 缓存通俗点,就是将已经得到的‘东东’存放在一个相对于自己而言,尽可能近的地方,以便下次需要时,不会再二笔地跑到起始点(很远的地方)去获取,而是就近解决,从而缩短时间和节约金钱(坐车要钱嘛). ...
- 【转】HTTP学习---Web 缓存
[原文]https://www.toutiao.com/i6592743068623962632/ 1. 前端缓存概述 前端缓存主要是分为HTTP缓存和浏览器缓存.其中HTTP缓存是在HTTP请求传输 ...
- Web缓存技术
本章导读 缓存主要是为了提高数据的读取速度.因为服务器和应用客户端之间存在着流量的瓶颈,所以读取大容量数据时,使用缓存来直接为客户端服务,可以减少客户端与服务器端的数据交互,从而大大提高程序的性能. ...
- 【Web技术】337- 秒懂 Web 缓存
点击上方"前端自习课"关注,学习起来~ 最近把前端缓存重新整理了一下,从整体的层面上把前端所有能用的缓存方案梳理了一遍.同时,对于http缓存,使用了表格的方案,使得原先晦涩难记的 ...
- 作为前端应当了解的Web缓存知识
缓存优点 通常所说的Web缓存指的是可以自动保存常见http请求副本的http设备.对于前端开发者来说,浏览器充当了重要角色.除此外常见的还有各种各样的代理服务器也可以做缓存.当Web请求到达缓存时, ...
- 前端应当了解的Web缓存知识
缓存优点 通常所说的Web缓存指的是可以自动保存常见http请求副本的http设备.对于前端开发者来说,浏览器充当了重要角色.除此外常见的还有各种各样的代理服务器也可以做缓存.当Web请求到达缓存时, ...
- 浅谈Web缓存
在前端开发中性能一直都是被大家所重视的一点,然后判断一个网站的性能最直观的就是看网页打开的速度. 其中提高网页反应的速度的一个方式就是使用缓存.一个优秀的缓存策略可以缩短网页请求资源的距离,减少延迟, ...
随机推荐
- 谈谈Runtime类中的freeMemory,totalMemory,maxMemory几个方法
最近在网上看到一些人讨论到java.lang.Runtime类中的freeMemory(),totalMemory(),maxMemory ()这几个方法的一些问题,很多人感到很疑惑,为什么,在jav ...
- SpringMVC:文件上传
MultipartFile attach HttpServletRequest re commons-io-2.0.jar (一定要用2.0以上的版本,否则没有copyInputStreamToFil ...
- 高速创建和mysql表相应的java domain实体类
今天创建了一个表有十几个字段,创建完之后必定要写一个与之相应的java domain实体类. 这不是反复的工作吗?为什么不先把这个表的全部的字段查出来,然后放到linux环境下,用sed工具在每一行的 ...
- 杭电 HDU 1279 验证角谷猜想
验证角谷猜想 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Sub ...
- ubuntu 14.04 下利用apt-get方式安装opencv
转载,请注明出处:http://blog.csdn.net/tina_ttl 目录(?)[+] 标签(空格分隔): Linux学习 OpenCV ubuntu 1404 下利用apt-get方式安装O ...
- Java中ASM框架详解
什么是asm呢?asm是assembly的缩写,是汇编的称号,对于java而言,asm就是字节码级别的编程. 而这里说到的asm是指objectweb asm,一种.class的代码生成器的开源项目 ...
- RESTful设计模式状态码code说明
一种软件架构风格,设计风格而不是标准,只是提供了一组设计原则和约束条件.它主要用于客户端和服务器交互类的软件.基于这个风格设计的软件可以更简洁,更有层次,更易于实现缓存等机制. 下面是标准RESTfu ...
- EasyCamera Android安卓移动视频监控单兵设备接入EasyDarwin开源流媒体云平台
前言 随着Android系统的不断更新和发展,现在越来越多的硬件产品选择用安卓系统作为运行环境,电视机,机顶盒.门禁.行车记录仪.车载系统.单兵设备等等,Android系统底层还是Linux,但对上层 ...
- C++笔记之用户定义的转换
用户定义的转换(User-defined Conversion) 是一种将一个类类型转换为另一种类型的机制 语法 operator conversion-type-idexplicit operato ...
- 一文读懂P2P和区块链的异同
说到P2P,大家的第一反应肯定是网络贷款.非法集资...事实上,P2P不等于网络贷款,他是点对点,人对人的交易模式. 而对于近两年最热的区块链技术,他和P2P有什么区别呢?区块链数据交换模式包括私有链 ...