6.2 缓存的投资回报:命中率、节省率与盈亏平衡 6.1 把单价和 TCO 立了起来,可老板真正要的是"这笔缓存改造几个月回本"。光看账面单价会骗人,因为它只告诉你单次调用花多少,没告诉你命中率每涨十个点、月账单能瘦多少斤。这一节把命中率直接折成钱:先推导有效单价公式,再看节省率随命中率怎么爬,最后给一个完整的改造回本算例和敏感性表。算到这里,你会发现自己其实在拿工程投入赌一条上升曲线——而这条曲线有天花板,赌注得押在它够得着回本线的位置。 命中率怎么变成钱 设输出常规价为 p,缓存读价为 r,缓存写价为 w,命中率为 h,未命中中需写缓存的比例为 wr(注意这里 w 是写价、wr 是写占比,符号别混)。
6.1 把单价和 TCO 立了起来,可老板真正要的是"这笔缓存改造几个月回本"。光看账面单价会骗人,因为它只告诉你单次调用花多少,没告诉你命中率每涨十个点、月账单能瘦多少斤。这一节把命中率直接折成钱:先推导有效单价公式,再看节省率随命中率怎么爬,最后给一个完整的改造回本算例和敏感性表。算到这里,你会发现自己其实在拿工程投入赌一条上升曲线——而这条曲线有天花板,赌注得押在它够得着回本线的位置。
设输出常规价为 p,缓存读价为 r,缓存写价为 w,命中率为 h,未命中中需写缓存的比例为 w_r(注意这里 w 是写价、w_r 是写占比,符号别混)。一笔输出 token 的成本期望是:
有效单价 = p×(1-h) + r×h + w×w_r×(1-h)
前两项是主流量——未命中走全价 p、命中走读价 r;第三项是写入税——只有未命中且需要写的那部分才背上写价。这个公式的妙处在它把 6.1 的四档单价和命中率焊成了一个数,任何命中率下都能立刻报出混合单价。更重要的是它暴露了一个反直觉事实:写税和命中率是负相关的,命中率越高,需要写的请求越少,写税越小,但写税在"低命中率段"最狠——恰恰是多数团队改造初期的状态。
节省率则定义为(无缓存单价 - 有效单价)/ 无缓存单价。无缓存时每 token 付 p(外加一次隐含的全价写入,但简化先不计),所以:
节省率 = [p - (p×(1-h) + r×h + w×w_r×(1-h))] / p
把 p 提出来,节省率 = h×((p-r)/p) - w_r×(1-h)×(w/p)。第一项 h 的系数是"读价相对全价的折扣力度",是正向拉动;第二项是写税,随命中率升高而减小(命中越高、需写越少)。所以曲线整体向上,但斜率被写税压扁——命中率从零到百分之百,节省率不会线性到满,而是被写溢价吃掉一截上限。这解释了为什么很多团队命中率冲到七成后,再往上涨省的钱越来越少:便宜通道快占满了,剩下都是难缓存的长尾。

一笔缓存改造的投入项通常包括三块:工程人力(排期做缓存策略、改前缀切分)、显存升级(为缓存池加卡或换大显存卡)、网关开发(统一接入、命中统计、回退)。收益项也有两块:token 费用下降(图 6-2 那条曲线直接变现金)、延迟下降带来的转化收益(首字快了,用户少流失,这笔常被财务忽略但要估)。做回本测算时,我只把可量化的 token 节省算进项,转化收益单列一行作上行期权,不混进硬回本——否则回本月数会虚低,老板发现后信任归零。
下面给一个完整算例。某团队月输出 token 三十亿(三千百万),输出常规价每百万三十元,改造前无缓存月费就是 3000×30 = 九万元。上缓存后命中率做到六成、读价每百万一元、写价每百万十元、写占比六成:
改造总投入假设为二十万元(工程人力加显存升级加网关)。回本月数 = 20万 / 4.5万 ≈ 4.4 个月,即第五个月账面回本。这个结果能不能信,取决于命中率稳不稳——下一节的敏感性表就是给它上保险。
延迟下降带来的转化收益,是回本表里最容易被高估的一项,我单独说清楚怎么估才诚实。首字延迟从八百毫秒降到四百毫秒,理论上用户等待焦虑下降、对话完成率上升,但这层收益取决于你的业务是不是延迟敏感型:客服问答可能敏感,批量文档摘要几乎不敏感。估法是用历史转化漏斗,把"延迟每降一百毫秒、转化升多少"从既有数据里回归出来,再乘上缓存带来的延迟降幅,得到一个区间而非一个数。我习惯把转化收益写成"乐观情景每月最多再加 X 元,未计入硬回本",并明确标注它是期权不是现金。把它塞进回本分母,是让回本月数好看的捷径,也是信任崩塌的捷径。
单点算例只是最好情形。真正要给老板的是区间:命中率掉十个百分点、请求量缩水一半,回本月数会不会从五个月跳到永远不回。下面这张表把三个扰动同时列出来,输入是上面那组基准数(基准回本约 4.4 月)。我特意把"双杀"一行放在最后,它代表最差可行情景,是和老板对齐回本月数时该用的安全垫,而不是用基准的四点四月末去承诺。
| 扰动情景 | 命中率 | 月输出百万token | 月节省(元) | 回本月数 |
|---|---|---|---|---|
| 基准 | 60% | 3000 | 45000 | 4.4 |
| 命中率 -10点 | 50% | 3000 | 34500 | 5.8 |
| 命中率 +10点 | 70% | 3000 | 55500 | 3.6 |
| 请求量 -50% | 60% | 1500 | 22500 | 8.9 |
| 请求量 +50% | 60% | 4500 | 67500 | 3.0 |
| 双杀(命中-10且量-50) | 50% | 1500 | 17250 | 11.6 |
表里最刺眼的是"双杀"那行:命中率掉十点、量缩一半,回本从 4.4 月拉长到 11.6 月。这说明缓存改造的收益高度依赖流量规模,小流量业务上缓存,回本周期会非常脆弱。反过来请求量涨一半,回本压缩到三个月,流量越大缓存越值钱——这和第2章说的"缓存是规模经济"完全自洽。还有一个读表技巧:看"月节省"对命中率的弹性比对请求量的弹性更陡,意味着命中率比流量更能决定回本快慢,所以改造的优先级应该放在"把命中率做稳"而非"盲目冲量"。
第一坑是把转化收益硬塞进回本分母,让回本月数好看,结果实际只靠 token 节省时远超预期。第二坑是忽略写税,用"命中率×折扣"直接算节省,漏掉未命中那笔写入费,月节省被高估一两成。第三坑最隐蔽:用历史最高命中率当基准,而缓存命中率会随业务前缀分布漂移,三个月后掉了,回本承诺就兑现不了。我的习惯是永远用敏感性表里的最差可行情景(双杀或命中-10)去和老板对齐回本月数,留足安全垫,兑现时反而常能提前,信任就建立了。
算到回本,这笔改造在纸面上已经成立。可纸面只算了明账——6.3 会告诉你,显存被缓存挤掉一块并发、每次 miss 多付写税、前缀一变全量重写,这三笔隐性账没翻出来之前,回本月数很可能是个乐观的假象。尤其上例里"显存升级"被我一口价算进二十万投入,它真实挤占了多少并发、反向推高多少单位成本,下一节用第2章的 KV 公式给你算回来。