浅析互联网中的缓存机制(互联网产生的缓存可以清理吗)
csdh11 2025-03-17 17:02 4 浏览
缓存,在互联网产品中可以简单理解为:第一次请求数据放到存储器中,下次显示该页面先把上次保存的数据显示出来,同时去请求数据,请求完成刷新显示新数据,并将其再缓存起来。
当今互联网应用(网站或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)。
先普及下基础知识:手机内存包括运行内存和内部存储。运行内存是用来运行程序的,不能用来永久存储数据,手机一旦关机或杀死进程,在内存中的所有数据都将会丢失。内部存储相当于计算机中的硬盘的角色,用于存储操作系统和应用程序的存储介质。
iOS的本地缓存数据存在磁盘存储(内部存储)中,由于Android手机通常将内部存储器固定在芯上,所以一般无法更换内部存储器的。 为了增强Android手机的存储能力,很多Android手机都支持扩展的SD卡(相当于计算机的U盘或者移动硬盘)功能。所以,Android手机存储缓存是可以选择数据存储位置的。
APP端存储数据的时候,会存储很多字段内容,一般情况下后台会给每条数据设定一个独立的id值,那么前端在请求数据的可以先查询本地缓存的数据中,最新的一条数据的id值,通过网络请求,把这个id值发给服务端,服务端会根据这个id在后台服务器中查询是否有比这个id值更大(更新)的数据存在,如果有就把新的数据返回给前端APP。
数据库缓存
数据库的缓存机制分为两个层面。
- 由数据库提供,可以对数据表建立的高速缓存。数据库的数据临时保存在一个位置上,再次同样的请求直接把这个数据返回去,而不需要再次去查询各种表取数据了,减少了查数据库的时间,提升效率。并不是所有的历史记录都缓存起来,要有策略,比如只缓存两个月的数据,并且两个月之前有请求过之后不再请求该数据的时候就会回收,就是把这条记录抹掉,就近多次请求的才会保存。时间过长、使用率不高的优先清除,要不然缓存太多就失去了缓存的本质和意义。
- 在数据库中,数据都是存放在磁盘中的。虽然数据库层做了对应的缓存,但这种数据库层次的缓存一般针对的是查询内容,一般只有表中数据没有变更的时候,数据库对应的缓存才发挥了作用。有时并不能减少业务系统对数据库产生的增、删、查、改产生的庞大压力。此时,一般的做法是在数据库与业务服务器之间增加一个缓存服务器,比如我们熟悉的redis。客户端第一次请求的数据从数据库拿出后就放到了redis中,数据不过期或不更改的前提下,下一次的请求都从redis中直接拿数据,这样做极大的缓解了数据库的压力。
服务器缓存
业务服务器缓存
业务服务器缓存是将动态页面直接生成静态的页面放在服务器上的硬盘里,用户调取相同页面时,静态页面将直接下载到客户端,不再需要通过程序的运行和数据库的访问,大大节约了服务器的负载。
每次访问页面时,会检测相应的缓存页面是否存在,若不存在,则连接数据库得到数据渲染页面并生成缓存页面文件,这样下次访问的页面文件就能发挥作用了。
举一个小例子:
用户A访问a页面,服务器解析a页面返回给用户A,同时在服务器内存上做一个映射,把a页面缓存在服务器的硬盘上。用户B访问a页面,服务器直接根据内存上的映射找到相应的页面缓存,直接返回给用户B。这样做减少了服务器对同以页面的重复解析。
代理服务器缓存
代理服务器是客户端和业务服务器之间的中间服务器,客户端先向这个中间服务器发起请求,经过处理后,再将请求转发到业务服务器。代理服务器缓存的运作原理跟浏览器的运作原理差不多,只是规模更大。可以把它理解为一个共享缓存,不只为一个用户服务,一般为大量用户提供服务,因此在减少相应时间和带宽使用方面很有效,同一个缓存数据会被重复使用多次。
以上,就是关于缓存机制的简单总结。产品汪们,再涉及项目中的缓存机制时,就不怕被程序猿们怼了!
作者:流年,互联网产品设计师,4年互联网产品设计经验。
本文由 @流年 原创发布于人人都是产品经理。未经许可,禁止转载。
题图由作者提供
相关推荐
- Microsoft Office 系列安装包官方链接大全
-
目前各大网盘限速严重,bt磁力又有某迅某雷等拦路虎,还好现在家庭入户带宽普遍都在百兆以上了,直接从微软官方下载零售版安装包反而是最快速的方法。以下是Office不同版本的官方下载链接。请注意,这些链接...
- 双管齐下 让2016版Office不再“窝里斗”
-
由于工作需要,笔者购买了正版授权的Office2016、Project2016及Visio2016软件,开始只安装了办公“三件套”Word、Excel及PowerPoint,激活后使用正常。后来再想...
- Office 2016 RTM中文版《许可条款》截图曝光
-
IT之家讯根据俄罗斯知名爆料人WZor之前的消息,微软最新办公套件Office2016RTM正式版已于9月1日交付合作伙伴。现在该软件中文版的《许可条款》部分截图已经曝光。当然,仅从上图中很难发...
- office2016下载及安装激活教程(office2016正版安装教程)
-
Office2016(32/64)位下载地址:...
- 如何自定义安装Office 2016?(office自定义安装程序)
-
Office2016软件安装是全程傻瓜式的,所有的组件和服务,没问你需不需要,全给你装上了,既占用电脑空间又拖慢运行速度,是不是有些不爽?如果只想安装其中的Word、Excel和PowerPoint...
- 微软Office从发行到现在共有多少个版本 每个版本都有什么区别?
-
MicrosoftOffice自1985年首次发布以来,经历了多次重大更新和品牌调整。以下是其核心版本及其主要区别的梳理:一、主要版本及发布时间线...
- office各版本的下载和安装方案来了,你要的都在我这里
-
office作为大家常用的办公软件,有没有你最用的上手的版本呢?office发展至今,以及出现了很多的版本,我还记得上学的时候,做办公软件的office一级、二级的考试,用的办公软件都是office...
- office版本选择 #office2016office2021?
-
《计算机应用基础》。同学们下周就要和大家分享office了,课本的office版本是2016,安装包稍后奉上,但还是建议大家下载office2021,原因很简单。·首先二者的界面风格基本一致,菜单布局...
- IT之家学院:只安装自己需要的Office2016组件的方法
-
以往Office的安装包都采用的是MSI安装器,允许用户在安装时选择安装的组件,但是微软发布的Office2016安装包只提供了C2R(ClickToRun)方式,因此默认情况下用户无法选择安装组件...
- 【完全免费】Office2016 软件图文安装步骤教程附安装包
-
软件介绍软件名称:Office2016软件语言:中文简体...
- 支持16种语言!Office 2016 for Mac版发布
-
2015-07-1405:46:00作者:鲁畅2015还没有走远;2016就要来了......OfficeforMac166月末,我们曾经报道过微软发布Office安卓版,并可以免费下载。近...
- http状态码(HTTP状态码304是什么)
-
100-199用于指定客户端应相应的某些动作。200-299用于表示请求成功。300-399用于已经移动的文件并且常被包含在定位头信息中指定新的地址信息。...
- 前端开发79条知识点汇总(前端开发技巧经验)
-
1.css禁用鼠标事件2.get/post的理解和他们之间的区别...
- 架构案例丨苏宁易购:商品详情系统架构设计
-
商品详情系统介绍基本介绍商品详情系统是一个展示商品基本信息、参数等详情的系统,是商品购买的入口。它是电商平台中访问量最大的系统之一,苏宁易购大促期间PV量和UV量很大,这么大的访问量对系统的并发能力要...
- 浅析互联网中的缓存机制(互联网产生的缓存可以清理吗)
-
缓存,在互联网产品中可以简单理解为:第一次请求数据放到存储器中,下次显示该页面先把上次保存的数据显示出来,同时去请求数据,请求完成刷新显示新数据,并将其再缓存起来。当今互联网应用(网站或App)的整体...
- 一周热门
- 最近发表
-
- Microsoft Office 系列安装包官方链接大全
- 双管齐下 让2016版Office不再“窝里斗”
- Office 2016 RTM中文版《许可条款》截图曝光
- office2016下载及安装激活教程(office2016正版安装教程)
- 如何自定义安装Office 2016?(office自定义安装程序)
- 微软Office从发行到现在共有多少个版本 每个版本都有什么区别?
- office各版本的下载和安装方案来了,你要的都在我这里
- office版本选择 #office2016office2021?
- IT之家学院:只安装自己需要的Office2016组件的方法
- 【完全免费】Office2016 软件图文安装步骤教程附安装包
- 标签列表
-
- mydisktest_v298 (34)
- document.appendchild (35)
- 头像打包下载 (61)
- acmecadconverter_8.52绿色版 (39)
- word文档批量处理大师破解版 (36)
- server2016安装密钥 (33)
- mysql 昨天的日期 (37)
- parsevideo (33)
- 个人网站源码 (37)
- centos7.4下载 (33)
- mysql 查询今天的数据 (34)
- intouch2014r2sp1永久授权 (36)
- 先锋影音源资2019 (35)
- jdk1.8.0_191下载 (33)
- axure9注册码 (33)
- pts/1 (33)
- spire.pdf 破解版 (35)
- shiro jwt (35)
- sklearn中文手册pdf (35)
- itextsharp使用手册 (33)
- 凯立德2012夏季版懒人包 (34)
- 反恐24小时电话铃声 (33)
- 冒险岛代码查询器 (34)
- 128*128png图片 (34)
- jdk1.8.0_131下载 (34)