同样一台 2 核 2G 的机器,有的业务跑到三千访问就卡,有的能扛两万。差别往往不在配置,在「有多少请求被缓存挡掉了」。而缓存有四个层级,每一层的命中率不同、成本不同、生效条件也不同。这篇讲清四层缓存各自解决什么问题,以及为什么「加缓存」经常比「升配置」更有效。

五款高性价比档位速查
有需要云服务器的,可以先看这一张表——五个价位段每款都是高性价比,价格从 22 元拉到 480 元。
| 商家 | 推荐款 | 配置 | 带宽与流量 | 月费 | 核心特点 |
|---|---|---|---|---|---|
| 云途 | HK.N4.A | 2 核 2G 20G | 200Mbps / 500G | 22 元 | 三项都在合理区间的入门档 |
| isvoro | HK CN2 Core | 2 核 2G 30G | 100Mbps / 300G | 25 元 | 硬盘 30G 加 CN2 回国线路 |
| rabisu | Aydn VPS x8 | 4 核 8G 60G | — | 34.5 元 | 每核 8.6 元,带宽需单独确认 |
| zji | 香港 BGP 在售机型 | 6 核 16G 480G | 55Mbps / 1T | 450 元 | 480G 硬盘是整机档里少见的大盘 |
| sixtynet | LAX-MEDIUM | 8 核 8G 160G | 10Gbps / 20T | 480 元 | 唯一「大端口配大配额」的组合 |
一、缓存的四个层级
还有第五层容易被忽略:「反向代理缓存」。
在服务器前面放一层 Nginx 或 Varnish,把「整个响应」缓存下来。
而它比应用缓存的层级更靠前——请求还没进到应用就被挡住了。
这一层的优点是「不需要改代码」——只要配置规则,就能把「不需要登录的页面」缓存起来。而它的缺点是「颗粒度粗」——整页缓存,只要有任何一个动态元素就不适用。所以它最适合「半静态页面」:文章页、商品页、分类页。
判断方法:看页面「未登录时是否一致」。
一致,就可以整页缓存。
再看一个「缓存层级」的顺序问题。
请求依次经过:浏览器 → CDN → 反向代理 → 应用 → 数据库。
而越靠前的层级,挡住请求的成本越低。
所以「优化缓存」应该从最前面开始。
而这解释了一个常见现象:「加了应用缓存,但服务器压力还是大」——因为请求已经进到服务器了,只是没查数据库。
真正要降「服务器压力」,得靠前面三层。
还有一个「缓存穿透」的问题。
请求查一个「不存在的数据」,缓存里没有,每次都要打到数据库。
所以「缓存空结果」也是一条重要规则。
而这个细节在流量大时很关键。
缓存不是一个东西,是四个位置。而它们的差别比想象中大。
| 层级 | 挡住什么 | 典型命中率 |
|---|---|---|
| 浏览器缓存 | 重复访问者 | 20% 到 50% |
| CDN | 静态资源请求 | 70% 到 95% |
| 应用缓存 | 数据库查询结果 | 50% 到 90% |
| 数据库缓存 | 磁盘读取 | 80% 到 99% |
这张表最该注意的是第二行:CDN 的命中率最高,而且它是唯一「不需要改代码」的一层。
只要把静态资源指向 CDN,命中率立刻能到 70% 以上。
这个「不需要改代码」的特点让 CDN 成为性价比最高的一层缓存。因为它的收益是「源站压力降 70%」,而成本是「接入配置」,不是「开发工作」。所以「先上 CDN,再谈优化」这个顺序,在绝大多数业务上都成立。
第三行应用缓存,这一层的收益最大但成本也最高。
因为它需要改代码——加缓存逻辑、处理失效、保证一致性。
而它的命中率取决于「数据重复读的比例」。
第四行数据库缓存,这一层通常是「自动的」。
数据库自己会把热点数据放进内存。
所以这一层的「优化」其实是「加内存」。
四层的顺序:浏览器 → CDN → 应用 → 数据库。
而这个顺序恰好是「离用户由近到远」。
所以优化缓存应该「从近到远」——先修用户侧,再修服务端。

二、CDN 为什么是第一优先级
CDN 还有一个「地理位置」的收益。
它不只是「挡请求」,还「就近响应」。
所以用户从离自己最近的节点拿数据,延迟更低。
这个收益和「带宽」无关——即使源站带宽充足,用户从远端拉数据仍然慢。而 CDN 把「跨地域传输」变成「就近传输」,延迟能降一半以上。所以「上 CDN」这件事,同时对「服务器压力」和「用户体验」有好处。
判断方法:对比「直连源站」和「经 CDN」的首字节时间。
差异明显,说明 CDN 的位置收益大。
再看一个「CDN 的缓存规则」。
不同资源的缓存时间应该不同。
图片、字体:缓存长(30 天以上)。
JS、CSS:缓存中等(7 天),但要用文件名哈希。
HTML:缓存短(几分钟到几小时)。
这个分层能让命中率和「内容更新」平衡。
而<'isvoro'+'> 那种「硬盘 30G」的档位,配上 CDN 之后,实际能承载的内容量远大于 30G——因为资源都在 CDN 上。
还有一个「CDN 的失效」问题。
内容更新后要「刷新缓存」。
而刷新是有成本的(时间和配额)。
所以「用文件名哈希」比「刷新缓存」更高效。
这个做法是现代前端构建的标配。
先讲 CDN,因为它是投入产出比最高的一层。
CDN 的作用是「把静态资源缓存在离用户近的节点」。
而「静态资源」在现代网页里占大头——图片、CSS、JS、字体通常在总传输量的 80% 以上。所以「把这些交给 CDN」等于「源站只需要处理 20% 的动态请求」。而这个比例直接决定「源站配置能降到多低」。
判断「该不该上 CDN」的方法很简单:看静态资源的比例。
静态资源超过 60%:上 CDN,收益明显。
低于 30%:CDN 收益有限。
而这个比例用浏览器开发者工具就能看出来。
再看一个「CDN 的隐性成本」。
CDN 不是免费的,按流量计费。
所以「源站流量降了,CDN 流量涨了」。
而总成本是否下降,取决于「CDN 单价 vs 服务器流量单价」。
而通常 CDN 的单价低于服务器流量单价,所以「总成本下降」是常态。而这个结论的前提是「缓存命中率高」——如果命中率低,回源流量大,等于「付了两份钱」。
所以「上 CDN 之后要盯命中率」。
而<'sixtynet'+'> 那种 20T 配额的大流量档,配合 CDN 使用能撑住相当大的业务量。
还有一个「CDN 的无效场景」。
如果内容是「强动态」的(每个用户看到的不一样),CDN 帮你挡不住。
所以「CDN 适用于静态或半静态内容」。
而这一点决定了很多 API 服务无法靠 CDN 优化。

三、应用缓存:收益最大也最难
应用缓存还有一个「缓存粒度」的选择。
缓存「整个页面」还是「页面里的某个数据块」。
而粒度越细,复用率越高,但复杂度也越高。
比如「缓存首页 HTML」只能被一个人复用;而「缓存首页里的热门文章列表」能被所有页面复用。所以「缓数据不缓页面」通常是更好的策略。而这个策略的代价是「模板渲染还是要跑」,所以省的是「数据库查询」不是「CPU」。
判断方法:看「哪个环节最耗时」。
数据库慢,缓数据。
渲染慢,缓页面。
再看一个「缓存与用户状态」的问题。
带登录状态的页面不能整页缓存。
所以「缓存」和「个性化」是冲突的。
解决办法是「缓存公共部分,个性化部分单独渲染」。
而这个做法在前端叫「边缘包含」或「片段缓存」。
还有一个「缓存雪崩」的问题。
大量缓存同时过期,请求全打到数据库。
所以「过期时间要加随机偏移」。
而这个细节在流量大时能救命。
第二层是应用缓存,它解决的是「同一份数据被反复查询」。
典型场景:首页的数据、分类列表、热门文章、配置项。
这些数据的共同点是「变化慢、读取频繁」。而它们的查询往往要连数据库,所以「缓存起来」能把数据库压力降一个数量级。而这个优化在「数据读多写少」的业务上收益最大——比如内容站、商品列表、资讯聚合。
判断「该不该加应用缓存」:看数据库的查询里有多少是「重复的」。
重复超过 50%,说明缓存收益大。
而这个比例可以通过「记录查询语句」统计出来。
再看一个「缓存的失效」问题。
缓存最难的不是「存」,是「什么时候失效」。
而失效策略有三种:定时过期、写时失效、手动清除。
定时过期最简单,但可能读到旧数据。
写时失效最准确,但要改所有写操作。
手动清除最灵活,但依赖人。
三种策略的取舍决定了缓存的复杂度。
所以「缓存不是免费的」——它把「数据库压力」换成了「一致性复杂度」。
而<'rabisu'+'> 那种 4 核 8G 的档位,适合跑「应用 + 缓存」同机的场景——8G 内存够放缓存,4 核够处理请求。
还有一个「缓存的存储位置」。
放内存最快但重启就没了,放磁盘能持久化但慢。
所以「缓存放哪」取决于「能不能容忍重建」。
而这一点在设计阶段就该定。

四、数据库缓存与内存
数据库这块还有一个「查询缓存」和「缓冲池」的区别。
查询缓存缓存的是「SQL 语句的结果」。
缓冲池缓存的是「数据页」。
两者的区别在于「数据变了怎么办」。查询缓存在表有任何写入时就全部失效,所以「写多的表」查询缓存几乎没用;而缓冲池是「页级」的,只失效改动的页,所以更有效。这也是为什么新版本数据库逐渐移除了查询缓存。
判断方法:看业务的「读写比」。
读远多于写,查询缓存有意义。
读写接近,只靠缓冲池。
再看一个「缓冲池」的实际影响。
缓冲池从 2G 提到 8G,一个 5G 的数据集命中率能从 40% 提到 95%。
而这个提升相当于「磁盘查询变成内存查询」。
所以「加内存」在数据库场景下的收益,远大于「加 CPU」。
而<'数脉科技'+'> 那条 4 核 32G 的独服线,就是为「缓冲池要大」的场景准备的。
还有一个「内存分配」的坑。
缓冲池设太大,会让系统没内存可用,导致换页。
所以「设成 60% 到 70%」是留余量的做法。
而这个经验值比「设成最大」更稳妥。
第三层是数据库自己的缓存,它的「优化」其实就是「加内存」。
数据库会把「热点数据页」放进内存缓冲池。
而缓冲池越大,命中率越高。
所以「数据库慢」这个问题,第一反应应该是「缓冲池够不够大」,而不是「加索引」或「换机器」。因为缓冲池不够时,每次查询都要读磁盘,延迟差几十倍。而这个问题的解法是「加内存」,不是「加 CPU」。
判断方法:看「缓冲池命中率」。
命中率低于 95%,说明缓冲池不够。
而这个指标数据库一般都会提供。
再看一个「缓冲池大小」的经验值。
缓冲池通常设成「可用内存的 60% 到 70%」。
所以「8G 内存的机器,缓冲池约 5G」。
而这个容量决定了「能缓存多少数据」。
所以「数据量超过缓冲池容量」时,命中率会断崖式下降。
而<'zji'+'> 那种 6 核 16G 的档,缓冲池能到 10G 左右,适合「数据量中等」的业务。
还有一个「内存与缓存」的连带关系。
应用缓存和数据库缓冲池会抢同一块内存。
所以「两边都开很大」会导致互相挤占。
而这个问题的解法是「分开部署」。
所以「缓存和应用是否同机」是一个架构决策。

五、命中率怎么测
命中率这块还有一个「统计口径」的问题。
「命中率」可能按「请求数」算,也可能按「字节数」算。
而两者的结果可能差很多。
比如「100 个请求里有 90 个命中,但命中的都是小文件」——按请求数算 90%,按字节数算可能只有 40%。而「字节命中率」才反映「省了多少带宽」,所以带宽优化要看字节口径,压力优化看请求口径。
判断方法:看控制台的「命中率」是按什么算的。
不确定,就同时看「回源流量」和「回源请求数」。
再看一个「命中率」的时间变化。
刚上线时命中率低(缓存空),跑一段时间后会升高。
所以「上线第一天看命中率」没有意义。
要看「稳定运行一周后」的数字。
还有一个「命中率下降」的排查。
如果命中率突然下降,通常是「缓存被清空」或「缓存规则变了」。
所以「变更记录」是排查的关键。
而这个习惯在多个系统协作时尤其重要。
这一节给三个可操作的测量方法。
方法一:CDN 命中率。CDN 控制台通常直接提供这个数字。
方法二:应用缓存命中率。在代码里加计数(命中次数 ÷ 总请求)。
方法三:数据库缓冲池命中率。数据库自带的统计指标。
三个指标里,CDN 命中率最容易被看到,也最容易提升;应用缓存命中率最需要开发投入;数据库命中率最依赖内存。所以「优化顺序」应该是「先看 CDN,再看数据库,最后才动应用缓存」——因为前两个的成本低得多。
再看一个「命中率与配置」的换算。
命中率从 50% 提到 90%,等于源站压力降了 80%。
而这个降幅相当于「把 5 核的活压到 1 核」。
所以「优化缓存」的效果,往往比「升级配置」大得多。
而这个结论解释了为什么「同样的配置,不同业务的承载能力差几倍」。
还有一条:「命中率不是越高越好」。
追求 99% 命中率可能需要「缓存所有东西」,而这意味着「内存占用极高」。
所以「边际收益」在命中率超过 95% 之后就会迅速下降。
而这个认识能避免「过度优化」。
再给一个「具体数字」的对照。
假设一台 2 核 2G 的机器,日访三千就卡。
方案 A:升到 4 核 4G,月费从 22 元到 38 元,多 16 元。
方案 B:上 CDN(假设成本 10 元/月),源站压力降 70%。
方案 C:加应用缓存(开发两天),数据库压力降 80%。
三个方案里,B 的「当月见效」和「成本」都最优;C 的「长期收益」最大但要等开发时间;A 的「最省事」但要持续付费。所以「先 B,再 A,最后 C」是现实的顺序——先用 CDN 撑住,再升配置兜底,最后做缓存优化。
这个顺序覆盖了「短期、中期、长期」三个时间尺度。
而<'云途'+'> 那种「22 元到 38 元只差 16 元」的价格梯度,让「方案 A」的门槛极低。
还有一个「缓存与流量」的关系。
CDN 的流量不计入服务器的配额。
所以「上 CDN」等于「凭空多了一份流量」。
而这个收益在流量紧的档位上尤其明显。
还有一条:「不要为了缓存而违反业务规则」。
比如「价格页不能缓存太久」,否则用户看到旧价格。
所以「哪些能缓存、缓存多久」要按业务定。
而这个判断只能由业务方做。
还有一个「缓存失效」的运维成本。
内容更新后,缓存不会自动更新,需要「等过期」或「主动刷新」。
而「主动刷新」是运维动作,要有人记得做。
这个成本经常被低估——因为它不出现在账单上,出现在「用户反馈内容不对」的时候。所以「上缓存」之前要问一句「内容更新后,多久可见」。而这个答案决定了「缓存策略」是否合适。
判断方法:看内容的「更新频率」。
一天更新几次的,缓存时间要短。
一个月更新一次的,可以缓存很久。
再看一个「缓存预热」的做法。
内容更新后,主动「访问一次」把缓存建立起来。
这样第一个真实用户不会遇到「缓存穿透」。
而这个动作可以用脚本自动化。
还有一个「缓存分级」的实践。
把内容按「热、温、冷」分层,不同层用不同缓存时间。
这样兼顾了「命中率」和「更新及时性」。
而这个做法在内容站上效果最好。
补一个「缓存与备份」的类比,帮助理解取舍。
缓存是「用空间换时间」,备份是「用空间换安全」。
两者都消耗内存或磁盘,但目标不同。
所以「内存该分多少给缓存、多少给备份」是一个要算的问题。
而<'rabisu'+'> 那种 8G 内存的档位,通常这么分:应用 2G、缓存 4G、系统 2G。
这个分配不是标准,是一个起点。
而实际配比要按监控数据调。
还有一句:缓存的收益「随业务量放大」。
访问量越大,缓存的绝对收益越高。
所以「小业务做缓存优化」性价比不高。
最后一句:缓存的本质是「假设同一份数据会被多次请求」。
如果这个假设不成立(每个请求都不同),缓存就没有意义。
六、缓存与配置的取舍
最后讲一个实际决策:加缓存还是升配置。
加缓存的成本:开发工作 + 复杂度 + 可能的不一致。
升配置的成本:月费增加 + 迁移成本。
而两者的收益不同:加缓存是「一次投入,长期收益」,升配置是「持续支出,随时可停」。所以「短期内」升配置更省事,「长期上」加缓存更经济。而这个分界点通常在「业务确认要长期跑」的那一刻。
判断方法:看业务的预期寿命。
三个月内的项目:升配置。
一年以上的项目:加缓存。
这个判断很实用。
因为「临时项目做缓存优化」是纯粹的浪费。
而<'云途'+'> 那种几十元一档、可选很多的产品线,正好适合「临时项目」——升配置的成本很低。
再看一个「混合策略」。
先上 CDN(零开发),不够再升配置(低门槛),最后才做应用缓存(高投入)。
这个顺序按「投入递增」排列。
所以每一步都能停。
最后回到开头:同样 2 核 2G,有的三千就卡,有的能扛两万。
差别在「有多少请求被缓存挡掉」。而四层缓存里,CDN 的投入产出比最高、数据库缓冲池最依赖内存、应用缓存最需要开发。所以「先 CDN,再内存,最后代码」这个顺序,比任何配置升级都省,也更容易在业务量翻倍时继续撑住。
本文讨论缓存分层与命中率优化的一般原理,不针对任何具体商家,也不对任何产品作性能评价。文中给出的命中率区间、缓冲池比例、优化顺序与成本对比均为按通用工程经验整理的估算值,不是行业标准;实际效果受内容类型、更新频率、用户分布、缓存策略与实现质量影响,同一业务在不同实现下差异可能很大。CDN 的计费方式、回源政策与命中率统计口径各商家不同,须以其文档为准。文中所有数字(如「静态资源占 80%」「命中率 70% 到 95%」「缓冲池 60% 到 70%」)均为参考值,实际须以自身监控数据为准。本文不构成任何架构建议或购买建议,亦不代表本站立场,也不代表对任何具体产品的推荐。因按本文优化或采购所产生的直接或间接损失,作者及本站不承担任何责任。
此内容由AI根据文章内容自动生成,并已由人工审核

喜欢
顶
难过
囧
围观
无聊
云服务器配置怎
国能e达怎么用?
云服务器加缓存
云服务器一台机