浅析互联网中的缓存机制

缓存,在互联网产品中可以简单理解为:第一次请求数据放到存储器中,下次显示该页面先把上次保存的数据显示出来,同时去请求数据,请求完成刷新显示新数据,并将其再缓存起来。

浅析互联网中的缓存机制

当今互联网应用(网站或App)的整体实现流程是:用户的请求从界面(浏览器或App界面)到网络传送、应用服务再到存储(数据库或文件系统),然后返回到界面呈现内容。

随着内容信息越来越复杂,用户数和访问量越来越大,我们的应用需要支撑更多的并发量,同时应用服务器和数据库服务器所做的计算也越来越多。但是往往我们的应用服务器资源是有限的,数据库每秒能接受的请求次数也是有限的(文件的读写也是有限的),如何能够有效利用有限的资源来提供尽可能大的吞吐量?一个有效的办法就是引入缓存,每个环节中请求可以从缓存中直接获取目标数据并返回,从而减少计算量,有效提升响应速度,让有限的资源服务更多的用户。

计算机缓存

计算机的缓存往往使用的是RAM(断电就掉的非永久储存),所以在用完后还是会把文件送到硬盘等存储器里永久存储。计算机里最大的缓存是内存条,最快的是CPU上镶嵌的L1和L2缓存,显卡的显存是给显卡运算芯片用的缓存,硬盘上也有16M或者32M的缓存。

其工作原理是当CPU要读取数据时,首先从CPU缓存中查找,找到就立即读取并送给CPU处理;如果没有找到,就从速率相对较慢的内存中读取并送给CPU处理,同时把这个数据所在的数据区块调入缓存中,可以使以后对整块数据的读取都从缓存中进行,不必再调用内存。这样的读取机制CPU读取缓存的命中率非常高,也就是说CPU下一次要读取的数据90%都在CPU缓存中,只有大约10%需要从内存读取。这大大节省了CPU直接读取内存的时间,也使CPU读取数据时基本无需等待。

WEB浏览器缓存

下面我们进入正题。

浏览器会缓存它浏览过的「资源」(包括网页,图片等),如果资源在保质期内,那下次同样的请求直接用缓存。过期之后,会带上资源上次的修改时间,由服务器来判断是否失效,失效的话就会给浏览器返回新的数据并继续缓存下来。

浏览器的缓存,存在用户电脑的硬盘上,用户每次使用浏览器读取缓存时先将硬盘上的缓存数据加载到内存中,再读取给浏览器。

浏览器端缓存的规则主要在HTTP协议头和HTML的meta标签中定义。他们分别从新鲜度和校验值两个维度来规定浏览器是直接使用缓存中的数据,还是需要去源服务器获取更新的版本。

新鲜度(过期机制):缓存数据保质期。缓存数据必须满足以下条件,浏览器会认为它是有效的,足够新的:

含有完整的过期时间控制头信息(HTTP协议报文头),并且仍在有效期内

浏览器已经使用过这个缓存数据,并且在上一次会话中(也就是用户上一次访问该数据时)已经检查过其新鲜度

满足以上两个情况的一种,浏览器会直接从缓存中获取缓存数据并渲染给浏览器。

校验值(验证机制):服务器返回数据的时候有时在头信息中带上这个资源的实体标签,它可以用来作为浏览器再次请求过程的校验标识。如过发现校验标识不匹配,说明数据已经被修改或过期,浏览器需要重新获取数据内容。

HTTP缓存机制

还记得HTTP协议吗?在这篇文章中有对HTTP协议的简单介绍:浅析前后端数据交互

当用户通过浏览器发起一个数据请求的时候,浏览器会通过以下几步来获取数据:

本地缓存阶段:先在本地查找该数据,如果有发现该数据,而且该数据还没有过期,就使用此数据,不会发送http请求到服务器

协商缓存阶段:如果在本地缓存找到对应的数据,但是不知道该数据是否过期,则发一个HTTP请求到服务器,然后服务器判断这个请求,如果请求的数据在服务器上没有改动过或过期,则返回304状态码(可以理解为服务器给浏览器的暗号),让浏览器在本地找到该数据

缓存失败阶段:当服务器发现请求的资源已经修改过,或者这是一个新的请求,服务器则返回该数据,并且返回200状态码, 此过程的前提是指找到该数据,如果服务器上没有数据,则返回404(这个大家多见过吧,就是平时见到404页面时的状态码)

浏览器中的操作对缓存的影响

强制刷新:当按下ctrl+F5来刷新页面的时候,浏览器将绕过各种缓存(本地缓存和协商缓存), 直接让服务器返回最新数据

普通刷新:当按下F5或者点击刷新按钮来刷新页面的时候,浏览器将绕过本地缓存发送请求给服务器,此时协商缓存是有效的

回车或跳转:当在地址栏上输入回车或者按下跳转按钮的时候,所有缓存都生效

浅析互联网中的缓存机制

浏览器缓存机制

安卓、iOS缓存机制

APP上的缓存机制和浏览器缓存的原理类似,APP与服务器交互的协议同样是大多基于HTTP(S)。

上一篇:专门收集 404 页面的网站。   下一篇:没有扩容机器 抗住了70多倍的流量增长