缓存原理科普:原来我们每天都在和缓存打交道
缓存原理科普:原来我们每天都在和缓存打交道
大家好呀~ 今天咱们聊一个“天天见但很少有人细想”的东西——缓存。
说真的,不管你是用手机、电脑,还是刷视频、逛网页,甚至是平时做饭、找东西,缓存都在悄悄帮你“省时间、省力气”。很多人一听到“缓存”,就觉得是个高深的技术名词,下意识就想躲开,但其实它特别简单,简单到我们生活里随处可见它的影子。
今天我就抛开所有复杂的技术术语,用最接地气的话、最常见的例子,把缓存的原理、作用、常见场景,从头到尾给大家讲明白,哪怕你完全不懂电脑、不懂技术,也能一看就懂,看完还能跟身边人唠两句~
先从生活例子入手:什么是缓存?其实你每天都在“用缓存”
咱们先别着急说技术上的缓存,先想两个生活里的小事,你一下子就懂了。
第一个例子:你家的冰箱。
你有没有想过,为什么要放冰箱?比如你每天早上要喝牛奶、吃鸡蛋,晚上要吃青菜、肉类,如果没有冰箱,你每天都得跑一趟超市买当天要用的食材——来回跑浪费时间,还可能耽误事儿。
而冰箱的作用,就是把你“常用的、近期会用到的食材”,临时存放在你家里(离你最近的地方),下次再需要的时候,不用跑远路去超市(原始数据源),直接打开冰箱就能拿到。这里的“冰箱”,其实就是一种“缓存”,“超市”就是“原始数据源”,“食材”就是“数据”,你“拿食材”的动作,就是“访问数据”。
第二个例子:你书桌上的常用书。
假设你是学生,每天要复习数学、语文、英语三门课,这三本书都放在书房的书架上(原始数据源)。如果每次做题、复习,都要跑到书房书架上找书,来回跑也挺麻烦的,尤其是你做题的时候,可能一会儿要翻数学书,一会儿要翻语文书,跑多了不仅累,还会打断思路。
所以你会怎么做?你会把这三本书,临时放在你的书桌上(离你最近的地方),做题的时候,伸手就能拿到,不用再跑书房。这里的“书桌”,就是“缓存”,“书架”是“原始数据源”,“书”是“数据”。等你放假了,不用再复习这三门课了,就会把书放回书架,书桌就空出来,下次需要缓存其他书的时候再用——这其实就是缓存的“淘汰”和“复用”。
总结一下(划重点,超简单):缓存,本质上就是一个“临时存放点”,专门用来放那些“我们经常用、近期会用到”的东西(数据),目的就是“不用每次都去原始的、远的、慢的地方找,直接在近处拿,省时间、提效率”。
技术上的缓存,和我们生活里的冰箱、书桌,原理完全一样,只是存放的东西从“食材、书”变成了“电脑里的数据、网页上的图片、APP里的内容”而已。
再讲技术层面:电脑/手机里的缓存,到底在干吗?
看完生活例子,咱们再过渡到技术上,就很容易理解了。
我们先想一个问题:电脑、手机里的“原始数据源”(比如硬盘、数据库、互联网服务器),为什么需要缓存?
答案很简单:速度太慢,差距太大。
咱们举个电脑里的例子:电脑的CPU(相当于电脑的“大脑”),运算速度超级快,快到每秒能处理几十亿次指令;而电脑的硬盘(相当于电脑的“仓库”,用来存文件、软件),速度就很慢,比CPU慢了几千倍、甚至几万倍——就相当于,CPU是“短跑冠军”,一秒能跑100米,而硬盘是“走路的老人”,一秒只能走1厘米。
如果CPU每次需要数据(比如打开软件、处理文件),都要直接去硬盘里拿,那CPU就得一直等硬盘“慢慢走”,相当于短跑冠军站在原地,等老人慢悠悠地把东西送过来,这就太浪费CPU的速度了,电脑也会变得特别卡(比如打开一个软件要等几十秒)。
这时候,缓存就该登场了。
电脑里的缓存(比如CPU缓存、内存缓存),就是一个“速度介于CPU和硬盘之间”的“临时存放点”——它的速度比硬盘快几百倍、上千倍,虽然比CPU慢一点,但离CPU很近,能快速把数据传给CPU。
当你第一次打开一个软件(比如微信)时,电脑会做两件事:
1. 从硬盘(原始数据源)里,把微信的所有数据(比如软件程序、你的聊天记录、头像图片)找出来,传给CPU,让微信打开;
2. 同时,把这些“微信的常用数据”,临时存放在缓存里(比如内存缓存),相当于“把微信的书,放在书桌(缓存)上”。
等你关掉微信,下次再打开的时候,电脑就不会再去硬盘里“慢慢找”数据了,而是直接从缓存里把微信的数据拿出来,传给CPU——这就是为什么,第二次打开微信,比第一次快很多(第一次可能要等3-5秒,第二次可能只要1秒不到)。
再比如你刷微信朋友圈:第一次刷的时候,朋友圈里的图片、视频,都是从互联网服务器(原始数据源)下载下来的,所以有时候会加载很慢(尤其是网速差的时候);但你刷过一次之后,这些图片、视频就会被缓存到你的手机里(手机缓存),等你下次再刷这条朋友圈,图片、视频会直接显示,不用再加载——这就是缓存的作用,哪怕网速很慢,也能快速看到之前刷过的内容。
这里再补充一个小知识点:缓存不是“无限大”的,就像你家的冰箱容量有限,只能放一定量的食材;你书桌的空间有限,只能放几本书一样,电脑、手机里的缓存空间,也是有限的。
所以,缓存会有一个“淘汰规则”:当缓存空间满了,要放新的数据时,就会把“最不常用、最久没用到”的数据删掉,腾出空间放新的。比如你冰箱里的食材,放了最久、你一直没吃的,就会先过期被扔掉;你书桌上的书,你最久没翻的,就会被放回书架,腾出空间放新的常用书。
技术上最常见的淘汰规则,叫“LRU”(不用记术语,记意思就行):最近最少使用的,先淘汰。这个规则很合理,也和我们的生活习惯完全一致——我们只会把常用的东西,放在身边(缓存里),不常用的,就放回远处(原始数据源)。
缓存的核心原理:就3步,看懂再也不懵
不管是生活里的缓存(冰箱、书桌),还是技术里的缓存(CPU缓存、手机缓存、网页缓存),核心原理都只有3步,超级简单,记下来就能跟别人讲明白:
第一步:访问数据时,先查缓存
当你需要某个数据(比如拿牛奶、找书、打开微信、刷朋友圈图片)时,不会直接去原始数据源找,而是先去“缓存”(冰箱、书桌、手机缓存)里查,看看缓存里有没有这个数据。
这一步就相当于,你想喝牛奶,先打开冰箱看看,有没有牛奶;你想做题,先看看书桌上有没有你要的书——先查近处,再查远处,省时间。
第二步:缓存里有,直接拿(缓存命中)
如果缓存里有你要的数据(比如冰箱里有牛奶、书桌上有你要的书、手机缓存里有朋友圈图片),那就直接从缓存里拿,不用去原始数据源找——这就是“缓存命中”。
这一步是缓存最核心的价值:快速拿到数据,提升效率。比如打开微信,缓存命中,1秒就打开;刷朋友圈,缓存命中,图片直接显示,不用加载。
这里补充一个小概念:缓存命中率。就是“缓存命中的次数”,除以“你访问数据的总次数”。命中率越高,说明缓存的作用越大,效率提升越明显。
比如你一周喝7次牛奶,其中6次都是从冰箱里拿的(缓存命中),1次冰箱里没有,去超市买的(未命中),那缓存命中率就是6/7≈85%——这个命中率很高,说明冰箱(缓存)帮你省了很多跑超市的时间。
反之,如果命中率很低(比如一周7次,只有1次从冰箱拿),说明缓存里的东西,不是你常用的,缓存就没什么用(比如你冰箱里放的都是你不爱吃的食材,每次都要去超市买)。
第三步:缓存里没有,去原始数据源拿,再存到缓存里(缓存未命中)
如果缓存里没有你要的数据(比如冰箱里没有牛奶、书桌上没有你要的书、手机缓存里没有这条朋友圈图片),那就只能去原始数据源(超市、书架、互联网服务器)里拿数据。
但这还没完,拿到数据之后,会顺便把这个“刚拿到的数据”,存到缓存里——目的是,下次再需要这个数据的时候,就不用再去原始数据源拿了,直接从缓存里拿就行,提升下一次的访问效率。
比如你冰箱里没有牛奶,去超市买了一瓶,回来之后,你会把牛奶放进冰箱(缓存),下次再喝的时候,就不用再去超市了;你书桌上没有某本书,去书架找回来,看完之后,会把书放在书桌上(缓存),下次再看的时候,就不用再去书架找了;你刷朋友圈,某张图片没加载过(缓存未命中),手机从服务器下载下来之后,会把这张图片存到手机缓存里,下次再刷到,就直接显示了。
这里还要注意一点:如果缓存空间已经满了,存新数据的时候,就会按照之前说的“淘汰规则”(比如最近最少使用),删掉缓存里最不常用的数据,腾出空间,再存新的数据。
比如你书桌上已经放满了书,再拿一本新的书回来,就会把书桌上最久没翻的那本书,放回书架,腾出空间放新的书;你手机缓存满了,再刷新的朋友圈图片,手机就会删掉缓存里最久没看过的图片,腾出空间存新的图片。
总结一下缓存的核心原理:先查缓存→有就直接拿→没有就去原始数据源拿,再存到缓存里。就这3步,循环往复,就能一直帮我们省时间、提效率。
常见的缓存场景:原来这些地方,都有缓存的影子
讲完原理,咱们再盘点一下,生活里、技术里,那些常见的缓存场景——你会发现,原来缓存无处不在,只是我们之前没注意而已。
一、生活里的缓存(除了之前说的冰箱、书桌)
1. 手机相册的“最近照片”:你刚拍的照片,会被缓存到手机的“最近照片”里,不用每次都去手机的存储深处找,打开相册就能快速看到;
2. 餐厅的“备菜台”:厨师不会每次客人点单,都去后厨的仓库里找食材,而是会把常用的食材(比如青菜、肉类、调料),提前放在备菜台上(缓存),客人点单后,直接从备菜台拿食材做饭,加快出餐速度;
3. 你的“记忆缓存”:比如你每天回家的路、你常用的手机号、你家人的生日,这些常用的信息,会被你记在脑子里(缓存),不用每次都去查手机、查笔记本(原始数据源),随口就能说出来;
4. 超市的“收银台货架”:超市会把口香糖、纸巾、打火机这些“客人结账时经常买的小东西”,放在收银台旁边的货架上(缓存),客人结账的时候,不用再跑到超市里面的货架上找,直接顺手就能拿到,节省客人时间,也能提高超市的销量。
二、技术里的缓存(和我们日常用手机、电脑息息相关)
1. 浏览器缓存(最常见):
你用浏览器(比如微信浏览器、Chrome浏览器)逛网页的时候,网页上的图片、文字、视频、样式(比如网页的颜色、字体),都会被缓存到你的电脑/手机里。下次再逛同一个网页,浏览器就不会再从互联网服务器上重新下载这些内容,而是直接从缓存里加载,所以网页打开速度会快很多。
比如你经常逛的公众号文章,第一次打开可能要加载图片,第二次打开,图片会直接显示,就是因为浏览器缓存了这些图片。这也是为什么,有时候你修改了自己的公众号文章,重新打开还是显示旧的内容——因为浏览器缓存了旧的内容,你需要清理浏览器缓存,才能看到新的内容。
2. 手机APP缓存(每天都在用):
不管是微信、抖音、淘宝,还是小红书、快手,这些APP都会有缓存。比如抖音里的视频,你刷过一次之后,会被缓存到手机里,下次再刷到同一个视频,不用再加载,直接就能看;淘宝里的商品图片、详情页,你看过之后,会被缓存,下次再点进同一个商品,加载速度会快很多。
这也是为什么,手机用久了,存储空间会越来越小——因为这些APP的缓存越积越多,占用了手机的存储空间。所以我们有时候会清理APP缓存,清理之后,手机存储空间会变多,但下次打开APP、刷内容的时候,加载速度会变慢一点(因为缓存被清空了,需要重新从服务器下载数据)。
3. CPU缓存(电脑/手机的“核心缓存”):
之前咱们提到过,CPU的运算速度超级快,而硬盘、内存的速度相对较慢,所以CPU本身也有缓存(分为一级缓存、二级缓存、三级缓存),用来存放CPU最近常用的数据和指令。比如你打开一个软件,CPU会把软件的核心指令缓存起来,反复调用的时候,不用再去内存里拿,提升软件的运行速度。
这也是为什么,CPU的缓存越大,电脑/手机的运行速度会越快——缓存越大,能存放的常用数据越多,缓存命中率越高,CPU的效率就越高。比如同样配置的电脑,CPU三级缓存是16G的,会比8G的运行更流畅,尤其是打开大型软件、玩游戏的时候,差距会更明显。
4. 数据库缓存(网站/APP的“后台缓存”):
我们逛淘宝、刷抖音的时候,看到的商品信息、视频列表、用户信息,其实都是存放在数据库里的(数据库就是网站/APP的“原始数据源”)。如果每个用户每次访问,都直接去数据库里查数据,数据库会承受很大的压力,反应会变慢,甚至会崩溃(比如双十一的时候,很多人同时逛淘宝,如果没有缓存,淘宝的数据库就会扛不住)。
所以网站/APP的后台,都会有缓存(比如Redis缓存),用来存放常用的数据(比如热门商品信息、首页推荐内容、用户的登录信息)。用户访问的时候,先查缓存,缓存里有就直接返回,没有再去数据库里查,查完之后再存到缓存里。这样既能减轻数据库的压力,又能提升用户的访问速度——比如你双十一逛淘宝,首页的热门商品,就是从缓存里加载的,所以才能快速显示,不会卡顿。
5. CDN缓存(视频/图片的“加速缓存”):
比如你在手机上看电影、刷短视频,这些视频文件都很大,如果所有用户都直接从同一个服务器上下载,服务器会很慢,而且不同地区的用户,加载速度差距会很大(比如你在南方,服务器在北方,加载速度会很慢)。
这时候就需要CDN缓存(内容分发网络):CDN会在全国甚至全世界的不同地区,设置很多“节点服务器”,每个节点服务器里,都会缓存热门的视频、图片内容。当你看视频的时候,会自动连接到离你最近的节点服务器(比如你在南方,就连接南方的节点服务器),从节点服务器(缓存)里下载视频,而不是从原始的主服务器上下载——这样加载速度会快很多,也能减少主服务器的压力。
比如你看腾讯视频、爱奇艺的电影,有时候会显示“正在连接XX节点”,其实就是在连接CDN的节点服务器,从缓存里加载视频。
缓存的好处和“小缺点”:凡事都有两面性
咱们聊完了缓存的原理和场景,再说说缓存的好处,还有它的一些“小缺点”——这样大家对缓存的理解,会更全面。
一、缓存的好处(核心就3点,简单好记)
1. 提升速度:这是缓存最核心的好处,不管是生活里的缓存,还是技术里的缓存,本质都是“减少访问原始数据源的时间”,让我们能更快地拿到想要的东西(数据)。比如打开APP更快、刷视频不卡顿、逛网页更流畅、做饭出餐更快;
2. 节省资源:减少原始数据源的“压力”,节省资源。比如电脑的硬盘,不用每次都被CPU频繁访问,延长硬盘的使用寿命;网站的数据库,不用承受所有用户的访问压力,减少服务器的负载;超市的收银员,不用每次都等客人跑到里面找东西,节省收银员的时间;
3. 降低成本:对于技术领域来说,缓存能减少服务器的数量和带宽的消耗,从而降低企业的成本。比如淘宝如果没有缓存,双十一的时候,需要部署更多的数据库服务器,花费会大大增加;有了缓存,就能减少服务器的数量,节省成本。
二、缓存的“小缺点”(不用怕,都是可解决的)
1. 占用空间:缓存需要占用一定的存储空间,比如手机APP的缓存,会占用手机的存储空间;电脑的缓存,会占用内存和硬盘空间;冰箱的缓存(食材),会占用冰箱的容量。不过这个缺点很好解决,比如定期清理手机APP缓存、电脑缓存,扔掉冰箱里过期的食材;
2. 数据不一致:这是技术缓存里最常见的一个小问题——比如原始数据源的数据变了,但缓存里的数据没变,导致用户拿到的是“旧数据”。
举个例子:你在淘宝上修改了自己的昵称,数据库里的昵称已经变了,但淘宝的缓存里,还是你原来的昵称,所以你下次打开淘宝,可能还是显示原来的昵称,需要刷新一下(清理缓存),才能看到新的昵称。
不过这个问题,技术上有很多解决办法,比如“数据更新的时候,同步更新缓存”“给缓存设置过期时间,到时间自动删除旧数据”,所以我们平时遇到的情况很少,就算遇到,刷新一下、清理一下缓存,就能解决;
3. 缓存雪崩(极端情况):当缓存空间满了,或者缓存服务器出问题了,大量的缓存数据被淘汰、或者无法访问,导致所有用户的访问,都直接落到原始数据源(比如数据库)上,数据库承受不住压力,就会崩溃,导致网站/APP无法使用。
比如双十一的时候,如果淘宝的缓存服务器出问题了,所有用户逛淘宝,都要直接去数据库里查商品信息,数据库瞬间就会被挤爆,淘宝就会卡顿、甚至无法打开。不过这种极端情况,企业都会提前做好预防,比如部署多个缓存服务器、设置缓存过期时间错开、准备备用缓存,所以我们很少会遇到。
最后总结:缓存的本质,就是“偷懒”的智慧
看到这里,相信大家已经完全懂了缓存的原理——其实缓存的本质,就是一种“偷懒”的智慧:不用每次都做重复的、麻烦的、费时间的事(去原始数据源拿数据),而是提前把常用的东西,放在身边(缓存里),下次再用的时候,直接拿,省时、省力、高效。
它不是什么高深的技术,而是源于我们生活中的一种简单逻辑,只是被运用到了电脑、手机、网站等技术领域,让我们的数字生活,变得更流畅、更便捷。
以后再遇到“缓存”这个词,不管是手机提示“清理缓存”,还是电脑里的CPU缓存,你都能笑着说一句:“哦,这个我懂,不就是跟我家冰箱一样,存常用东西的地方嘛~”
如果觉得这篇科普对你有帮助,欢迎转发,让更多人看懂缓存~ 也可以在评论区留言,说说你平时遇到的和缓存相关的小事呀~