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缓存
在前端开发中性能一直都是被大家所重视的一点,然后判断一个网站的性能最直观的就是看网页打开的速度. 其中提高网页反应的速度的一个方式就是使用缓存.一个优秀的缓存策略可以缩短网页请求资源的距离,减少延迟, ...
随机推荐
- jdk的动态代理源代码解析
先看一下JDK的动态是怎么用的. package dynamic.proxy; import java.lang.reflect.InvocationHandler; import java.lang ...
- ArcGIS 10.1系列产品 升级安装至 ArcGIS 10.2
概要 分享ArcGIS10.1系列产品(包括desktop.engine.server)升级到ArcGIS10.2的过程,并提供安装ArcGIS10.2安装的详细文档下载链接和crack需要的文件: ...
- C语言-回溯例3
排列问题 1.实现排列A(n,m)对指定的正整数m,n(约定1<m<=n),具体实现排列A(n,m).2. 回溯算法设计设置一维数组a,a(i)(i=1,2,…,m)在1—n中取值.首先从 ...
- c++对象模型和对象内存布局
简单对象模型:如下图所示: 每一个object是一系列的slots,每一个data member或者function member都有自己的一个slot.这种模型的空间和执行效率都很低.在这个模型中, ...
- Android对apk源代码的改动--反编译+源代码改动+又一次打包+签名【附HelloWorld的改动实例】
最近遇到了须要改动apk源代码的问题,于是上网查了下相关资料.编写了HelloWorld进行改动看看可行性,经过实验证明此方案可行,而且后来也成功用这种方法对目标apk进行了改动,仅仅只是须要改动的部 ...
- kubernetes安装过程中遇到问题及解决
系列目录 根据机器环境的不同,有的可能一次就安装成功,有的则可能遇到各种各样的坑需要排查.建议不熟悉linux的用户使用全新的环境来安装kubernetes.以下记录本人在安装过程中遇到的问题及解决方 ...
- 官网下载kettle
首先什么是kettle,引用下百度百科 Kettle是一款国外开源的ETL工具,纯java编写,可以在Window.Linux.Unix上运行,数据抽取高效稳定. Kettle 中文名称叫水壶,该项目 ...
- 代写GIS系统
代写GIS系统,熟悉arcgis,leaflet ,百度地图等api.可以提供系统代写,技术咨询等
- php CURL 模拟 POST 提交数据
<?php function liansuo_post($url,$data){ // 模拟提交数据函数 $curl = curl_init(); // 启动一个CURL会话 curl_seto ...
- Hibernater中的持久化对象以及状态转换
一.持久化对象的要求 1.提供一个无参的构造器:使Hibernate可以使用Constructor.newInstance() 来实例化持久化类. 2.提供一个标识属性(identifier prop ...