cache的作用和工作原理-缓存:存储与快速访问
在咱们这个每天被“大数据”围着转的互联网时代,缓存那玩意儿简直就是互联网的心脏泵,负责给数据搬运工们造风。别一听就认定自己去翻《计算机组成原理》就能懂了,那玩意儿跟拍电影时用的放映机原理似的,咱把它翻个面,实际上就是个“临时内存 + 带锁的搬运工”的组合拳。 拿咱们最常用的浏览器说事儿,你输入个网址,浏览器得先把这页网页的 HTML、CSS、JS 全给怼到本地硬盘的某个小格子里,这就是缓存。它俩关系得说清:浏览器自己给网页“写”进这个格子,叫客户端缓存;然后服务器那边给缓存文件打个“封条”,那是服务端缓存。并且这个封条得带个锁,哪位也不许直接打开它,要不就你显式地敲门。
这锁是为了防着网页被恶意篡改,要么被黑客通过缓存给黑了。 为啥要搞如此复杂的机制呢?出于网络不稳,比如你刚刷新完网页,突然网线断了,要么服务器挂了,那页面要是真加载不出来,体验直接崩。
这时候手动刷新网页,数据还得回服务器,浪费工夫。
那就依赖缓存了。浏览器先把网页给保存下来,就算下次再访问,要是网络好了,直接从硬盘掏出来显示,比再去问服务器还要快。
这就好比你去电影院,先在家刷了蓝光碟,后面那部片子在电影院上映,你不用非得跑两趟。 不过,浏览器自己存的缓存往往带着“私人恩怨”,也就是客户端缓存。它存的一般是网页当时的状态,比如你当前弹出来的弹窗、刚刚选中的那个色号,就连是浏览器刚下载的某个游戏文件。
要是哪天浏览器自己坏了,要么你手动清除了缓存,这些内容就全没了,相当于你刚买的电影票又作废了。
故此,浏览器会时不时地自动清理这些缓存,保持系统清爽。 那服务器存的呢,服务端缓存。
这玩意儿更严肃,它存的是网页的本质,比如那个 HTML 代码、固定的布局、要么刚刚你点击过的那个按钮状态。
只要服务器没被黑客攻破,数据就稳当当的。并且服务端缓存一般比客户端缓存更“防贼”,数据都在服务器自己的块上,保密性更好。 咱再看看百度、Google 这种大厂,它们早就把缓存玩成了战略武器。
你看它们首页,层层的“相关推荐”、“猜你喜爱”,本质上就是它们把之前搜索过无数次的用户数据,当成缓存给堆出来的。
这堆数据能重复渲染,能懒得点一次,能瞬间把页面上几千个视频片段播出来。
要是没有这堆缓存,每次用户想看个视频,都得把刚刚请求的那份数据从服务器重新拉一遍,那速度之慢,估摸比你在沙漠里走两步都要慢。 再聊聊那些“秒开”的 APP,要么游戏。记得去年有个小游戏,你点进去还没等加载完图,能直接听到击杀音效。
这全靠服务器端的高频缓存。服务器先把游戏逻辑、地图、角色模型全拷进内存池里,然后固定一个路径。用户一来,直接读内存,再跟本地硬盘里的素材拼起来。
这个过程在服务器这边根本是零延迟,用户感觉不到任何卡顿,只有风在耳边呼啸。 还有个小细节,缓存频率得讲究。有些位置,比如你刚点进去的页面,浏览器会存个“预热”标记,下次访问就顺便把前一个页面的状态也带那会儿,这叫预取。
这在服务器端也有,比如双十一那个秒杀页面,为了不让用户排队,他们会在用户下单前就把库存、价格、库存状态都先缓存好,等用户确实下单了再触发,哪怕这时候网络崩了,页面也能先判个价格,不至于让用户搞错。 不过,缓存也不是万能的,也不是啥“一辈子不用管”的宝贝。缓存多了,维护成本得跟着涨。你得定期去清理那些过期的数据,要么把不再访问的页面从缓存里删掉。
不然缓存堆得像个山,浏览器就卡得跟乌龟爬似的。目前的现代操作系统和多进程技术,实际上也在帮缓存减负,把那些不必要的缓存数据隔离开,只保留真正有用的局部。 这就好比咱们家里存粮。平时家里仓库满满当当,都是当地产的大米、面粉,这叫本地缓存。
要是哪天外面物价飞涨,要么家里有人外出,你就得把粮食倒出来运到粮仓,这叫去中心化缓存。
这时候本地粮仓里的东西就少了,但整个社区的粮食储备就多了。 在医疗、航空这些对速度要求极高的领域,缓存的原理又变得狰狞起来。飞机起飞前,机长得把全球所有飞机的飞行参数、天气报告、就连未来几个小时的航班盘算,全体缓存到机载计算机里,然后启动飞行管理计算机。
哪怕在发信号之前,飞机出事了,凭这几十小时的缓存数据,也能慢慢倒推出一条可能的事故缘由,避免飞机撞树。
这种级别的缓存,数据量大到没概念,还得特别小心别被黑客动了。 回到咱们一般/平平人的体验,缓存就是那个“快一点”的借口。它让浏览器不再每次都要和服务器协商,让 App 不再每首歌都去下载一次。它把 internet 上所有的等待工夫,都提前给删了。
只要你的设备里还有个干净利落的缓存盘,哪怕网络再慢,那网页也能像水一样瞬间流淌出来。 故此说,缓存这东西,表面看就是个保存数据的动作,实则是互联网把延迟压缩成速度的魔法。它把“网络不稳定”这种灾难,改成了“数据命中”这种常态。下次你点开网页时,不妨多琢磨两句,看看缓存标签里藏着啥秘密,说不定还能知道点啥没被访问过的页面,哦,对了,别把缓存弄丢了,那是你刷历史记录的基础。
声明:演示网站所有内容,若无特殊说明或标注,均来源于网络转载,仅供学习交流使用,禁止商用。若本站侵犯了你的权益,可联系本站删除。
