计算机网络中缓存技术,编程达人

计算机缓存也就是通常说的Cache,对计算机编程有所了解的应该都知道,缓存常与Redis联系在一起,但是Redis仅仅是应用中的一部分。

1、浏览器缓存

浏览器面对的问题是网络访问的速度远远低于本地访问的速度,每次都访问造成网络开销太大,于是就增加了一个中间层:开辟“缓存”区域,缓存JS, HTML, CSS,图片等各种文件。浏览器遵循一定的规则来判断什么时候用缓存中的文件,什么时候去访问服务器的新文件。在服务器发给浏览器的响应中,有expires, max-age, last-modified等,Header, expires 和 max-age 定义了一个资源的过期时间, last-modified和Etag用来检查一个资源在服务器端有没有变化。

c56ec5fb28cf8bf6771f454e02ed4569.png

浏览器缓存示意图

流程如下:

地址栏中输入网址,按回车以后浏览器会使用Expires,max-age来查看本地缓存的内容是否失效,如果没有,就直接使用 。

浏览器刷新按钮的时候浏览器不再考虑Expires,max-age, 而是把Last-Modified / ETag 发到服务器去,问问服务器,这个文件有更新没有?如果没有,那就用本地缓存的文件,如果有更新,用服务器端最新的。

强制刷新的时候不使用任何缓存,直接向服务器发出新请求。

e948ea993bf3c995954e7d9c35c14967.png

数据配置项

2、CDN

如果客户端离服务器距离比较远,网速会慢,体验会差;海量的用户给后端服务器带来巨大压力,所以CDN就采用了就近访问的方案:把后端服务器的数据数据复制多份,挪到离客户端比较近的“服务器中,不但减少了访问的时间,还大大降低了 “中央”服务器的负载。 浏览器缓存和CDN是配合使用的, 浏览器的本地缓存失效以后,就需要向后端服务器来获取了,但是如果系统有CDN,浏览器还可以就近访问CDN,这样用户体验就不会差。

5e088dd0e5d8945da3c1820885aa19ae.png

是否使用CDN对比

3、Page Cache

操作系统的时间是按纳秒为单位的,虽然内存和硬盘都在同一台机器中,没有网络开销,但是硬盘实在是太慢,比内存慢几万倍, 内存等不及。 所以操作系统也增加了一个抽象层:Page cache , 把硬盘的文件缓存在其中。 几乎所有的文件读写操作都依赖Page Cache,在向硬盘写入文件的时候,并不是直接把文件内容写入硬盘以后才返回的,而是写入到内核的Page Cache就直接返回了。 当从硬盘读取文件时,也不是直接把数据从硬盘复制到用户态的内存,而是先复制到内核的Page Cache ,然后再复制到用户态的内存。

4、应用程序缓存

应用程序缓存大家都很熟悉, 因为数据库访问速度慢,无法应对大量的并发访问,所以增加一个缓存中间层,把最火热的数据从数据库中取出,放到快速访问的内存中。应用程序的缓存也是个双刃剑,虽然提升了访问效率, 但带来了很多问题:

82b4ebb648dfe91d32480851c76d2d1f.png

应用程序、缓存、数据库三者关系图

代码变复杂

需要处理缓存和数据库之间的数据一致性问题

存在穿透,雪崩等问题

应用程序缓存现在已经变成了分布式的集群形式,数据管理很麻烦。

5、CPU缓存

虽说内存速度快, 可是在CPU面前,内存也只能屈居下风,CPU比内存快的多得多,数据和指令必须从内存加载到CPU才能执行, 为了解决速度匹配问题就在CPU内增加缓存中间层,不过必须用硬件来实现。

db954803b7ef6807c61fcc54181a73c6.png

CPU、CPU缓存、内存关系图

CPU的缓存包括L1、L2、 L3这三级Cache,把最火热的访问数据放入到其中。

在L1 Cache 最靠近CPU,速度最快,可以分为指令Cache (CPU要执行的指令)和数据Cache(指令要操作的数据)。 CPU Cache 和上面提到的各种Cache比起来,小得可怜,也就是几百K到几M。 所以这些Cache要想发挥真正的作用,必须得依赖规矩局部性原理:

时间局部性:如果程序中的某条指令一旦执行,则不久之后该指令可能再次被执行;如果某数据被访问,则不久之后该数据可能再次被访问。

空间局部性:指一旦程序访问了某个存储单元,则不久之后。其附近的存储单元也将被访问。

总结

对于数据读写不匹配的问题,一般的解决办法就是增加一个空间层,用空间的冗余来换取时间的匹配,同时要遵循下列原则:

数据的读操作远大于写操作

数据计算过程比较耗时

数据是某个数据源的数据备份

数据访问遵循“局部性原理”

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/501401.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

计算机是怎么RUN起来的

1.实际上计算机只会实现输入、运算、输出 这三大模块缺一不可,缺少输入意味着没有用户能使用,缺少运算相当于一条电线毫无意义,缺少输出相当于一直堆积信息的垃圾箱 因此计算机的硬件是由大量的IC(Integrated Circuit 集成电路)组成&#…

python缺点这么多、为什么还流行_Python这么火,为什么说它不是未来的编程语言?...

本文转载自公众号“读芯术”(ID:AI_Discovery) Python这两年非常火,随处可见的广告让它逐渐变成了一种老少皆知的存在。 虽然问世几十年后,Python才得到编程社区的重视。 但是,其发展的势头似乎无人能及。自2010年年初以来&#x…

与计算机硬件系统紧密相关的程序设计语言是,与计算机硬件系统紧密相关的程序设计语言是...

摘要:计硬件智慧_章节测安全案树_食品试答。系统相关序设星尔章节应用雅_答案_超测验数学。紧密计语星尔整合章节满分雅_答案_超测试思维。...计硬件智慧_章节测安全案树_食品试答。算机学营销单元答案市场。系统相关序设星尔章节应用雅_答案_超测验数学。学_信公智…

快速掌握一门计算机语言,程序员5种编程入门方法,快速学会一门编程语言!...

技术更新太快,精通一门编程语言已经实属不易,又怎么好意思说精通多门语言呢?这对于编程思想也是大有裨益的。每门设计语言都有其独特的设计思想,譬如PHP的关联数组perl、Ruby的对象模型源自Smalltalk。如何快速学会一门编程语言?下面w3csch…

数据结构与算法基本

栈的算法: 计算机内部空间是连续存储的,但是可以通过逻辑上改变内存的物理结构,数据在内存上呈现出的是连续分布状态 主要的典型数据结构 在实现栈这种数据结构时,首先要定义一个数组和一个变量。数组中所包含的元素个数就是栈的…

synchronized不能锁静态变量_面试官:请说一下对象锁和类锁的区别

有锁才有自由生活中不存在绝对的自由,绝对的自由通常对应的无序和混沌,只有在道德、法律、伦理的约束下的相对自由,才能使人感受到自由。而在多线程编程中,锁是至关重要的,锁就是道德,就是法律约束&#xf…

计算机主板开机接线端子,装机必看,机箱前置面板接线向导,不怕再接错线了...

对于新手来说,在自己DIY一台电脑整机的时候,肯定是既兴奋又恐慌。兴奋是自己总算能亲自动手,组装一台自己称心如意且个性化十足的台式机。让大家感到恐慌的是主板那么多针脚和接口,该从何处下手,对于不懂行不专业的人来…

atoi函数_每日干货丨C语言中的字符串处理库函数介绍与实现

strlen函数:求字符串的长度size_t strlen(const char *s)头文件:#include说明:求出s指向的字符串的长度(不包括null字符)。返回值:返回s指向的字符串的长度。size_t strlen(const char *s){size_t len 0;while(*s) len;return len;}strcpy和strncpy函数&…

从windows计算机中卸载office,如何彻底卸载电脑中的Office组件|Office办公软件卸载不干净怎么办...

‍有不少用户遇到原本在电脑中的软件卸载不干净,而无法重新安装软件的问题。比如说有位用户在安装Office办公软件时就是因为没有彻底卸载原先电脑中的软件才导致无法安装。接下来系统城小编就和大家分享一下彻底卸载电脑中的Office组件的方法。1、打开电脑自带的控制…

python调用函数怎么表示_Python---7函数(调用定义函数)

函数 Python内置了很多有用的函数,我们可以直接调用。 要调用一个函数,需要知道函数的名称和参数,比如求绝对值的函数abs(),只有一个参数。可以直接从Python的官方网站查看文档:也可以在交互式命…

解决Android studio 的Glide 4.1.0第三方jar包如何导入libs目录

很多人在让自己的安卓实现导入外部的图片资源的时候遇到一系列的问题,今天就来好好解决 首先,相去github的官网下载这个jar包,下载任意一个即可,注意:你的网络可能会被墙,你可以换成手机的热点去下载&#…

没有显示屏怎么启动服务器,中关村xp系统提示“没有启动服务器服务”如何解决...

通常情况下,windowsxp系统电脑发生故障都会弹出警告提示,然后用户就可以利用这些信息判断出错来源从而解决问题。比如,一位中关村XP系统用户反馈自己的电脑发生故障,弹出警告提示:没有启动服务器服务。这该如何处理呢&…

python如何改变入参的值_从事数据分析3年后,发现用python入门数据分析这三本书必看!...

做数据分析为什么选择python?为什么选择python来做数据分析?先来看一下用python做数据分析有什么优势1、python在数据分析方面有非常专业的模块,很多常用功能,在做数据分析时非常方便。2、python相比于其他计算机编程,…

Android studio使用手册说明

Android studio project约是eclipse workspace Android studio module是eclipse project 首先,从eclipse到Android studio是一个必然的过程了,Android studio集成了eclipseADT插件开发安卓APK,所有人都是希望越方便越好,不会去自…

Android studio的设置界面介绍

1.编译按钮 2.运行选择按钮 3.运行按钮 4.设置界面 5.设置页面布局 6.系统保存设置 7.密码设置 8.下载按钮: 9.数据传递: 11.改色: 12.自定义完成指定代码的检查 13.Notifications 14.宏设置 15.SDK管理,可以直接导入自己的SDK&am…

打印机显示rpc服务器,win10打印机出现RPC服务器不可用的处理办法

win10打印机出现RPC服务器不可用的处理办法?大家在使用打印机打印的时候,多多少少都会碰到一些这样那样的故障。这不就有win10系统的网友,在使用打印机打印的时候,提示:RPC服务器不可用。出现这样的故障,大…

Android Studio的快捷键图文并茂

首先在设置界面可以看到很多快捷键,并支持将之前软件的快捷键习惯导入安卓开发中,默认的就是安卓开发的快捷键,所以基本不需要一些学习成本 双击shirf可以跳出查找界面 修改快捷键 按住ctrlshirftalt并用鼠标单击要添加代码的位置。就可以实现…

python中str和input_python中input()与raw_input()的区别分析

使用input和raw_input都可以读取控制台的输入,但是input和raw_input在处理数字时是有区别的 纯数字输入 当输入为纯数字时 input返回的是数值类型,如int,float raw_inpout返回的是字符串类型,string类型 输入字符串为表达式 input会计算在字符…

解决Android studio 加载不出网络图片的步骤

第一:网络问题,好像连家里的wifi没有手机的wifi能下载那个github的压缩包, 第二:版本问题,我把导入的包降低版本了,系统匹配成功, 第三:布局的时候需要把宽度高度的比例和加载的网…

现代操作系统初理解

1.现代操作系统是由中断驱动的:如果没有进程要执行,没有I/O 设备要服务,也没有用户请求要响应,操作系统将会静静地等待某件事件的发生。 2.操作系统和用户共享了计算机系统的硬件和软件:既然是共享了,就可…