缓存命中 计费 推荐怎么设置

成本与用量

讲清缓存命中的计费口径,并给出可落地的缓存配置建议与验证步骤,帮开发者少花冤枉钱。

很多人第一次看到缓存相关的账单项时会懵:明明请求没变多,费用却拆成了几行,命中率高低也说不清。这篇不重复讲概念,只解决一件事——缓存命中到底按什么口径计费,以及你该把参数怎么设、设完怎么验证。适合已经在调 API、想把这块成本压下来的开发者。

很多人第一次看到缓存相关的账单项时会懵:明明请求数没变,费用却被拆成好几行,命中率高低也说不清到底省没省。这篇不重复讲缓存是什么,只解决一件事——缓存命中按什么口径计费,参数该往哪设,设完又该怎么验证。适合已经在调 API、想把这块成本压下来的开发者。

先说结论方向:缓存省钱的前提是「同一个前缀被反复复用」,而不是「开了缓存就一定便宜」。搞不清这个前提,配置越复杂越容易踩坑。下面按计价口径、配置决策、验证循环、不该开的场景四块来讲。

先搞清:缓存命中是怎么被计价的

缓存不是免费加速。写入和读取通常各算一项,写入的单价和读取的单价不一定相同,具体倍数各家不一样,去 /official-api 里逐家核对当时的数字。所以判断划不划算,要同时看写入成本摊薄后有没有被读取次数覆盖掉。

命中只是把原本按普通输入价算的那部分,换成按缓存价算,并不是整单打折。整单里没命中的部分照旧按普通输入计费,输出也照旧。别看到「有命中」就以为整张账单都在打折。

计费项按什么口径算容易踩的坑
缓存写入按写入的内容量算,单价独立以为写入免费,结果账单多一行
缓存读取按实际命中的内容量算命中率低时读的少、写的多
普通输入未命中部分照常计费前缀改了一个字,全部退回普通输入
输出和缓存无关,照常计费把整体降本误算到缓存头上

配置时真正要做的四个决定

  • 决定缓存什么:稳定不变的部分(系统提示、长文档、工具定义、少样本示例)放最前面,会变的部分(用户输入、时间戳、随机 ID、用户昵称)放后面,顺序错了命中率直接归零
  • 决定什么时候开:短提示、一次性任务、内容每次都变的场景,写入成本可能盖过节省,这种就别开
  • 决定缓存粒度:同一个前缀跨多次调用复用最划算,前缀哪怕差一个字符就是另一份缓存,等于重新写
  • 决定失效与刷新:内容更新了就换一个新前缀,别在原前缀里改字,否则等于每次都在重新写入

这四条里最容易做错的是顺序。很多人把系统提示写在中间,或者在开头拼了时间戳,结果请求量再大也命中不了。判断标准很简单:拿两次真实请求的原文对比,从第一个字符开始数,看最长公共前缀有多长,这段才是有可能被复用的部分。

  1. 拉一份真实请求样本从日志里取十到二十条同业务的请求,别用构造的假数据。
  2. 算最长公共前缀从第一个字符逐位比对,找出所有请求都一致的那一段,这段就是候选缓存区。
  3. 重排内容顺序把候选缓存区提到最前,把变量部分(用户输入、时间戳)统一挪到后面。
  4. 确认存活时间对照所用接口的缓存存活规则,看你的请求间隔是否落在存活窗口内,短于最短存活时间可能根本不计入。

设完怎么验证有没有省到

配置改完不能凭感觉说「应该省了」,要有一轮固定动作。核心是把用量日志按计费项拆开,对比开缓存前后的占比变化,而不是只盯总金额。总金额受调用量波动影响大,占比才说明问题。

固定跑一批相同前缀的任务,记录四个字段:缓存读取量、缓存写入量、普通输入量、输出量。缺字段就没法复盘,字段口径可以参考站内用量日志相关的做法自己对齐。

命中率低的现象可能的根因先查什么
每笔都只有写入没有读取前缀每次都被改写开头是否拼了时间戳或随机 ID
偶尔命中偶尔不命中请求间隔超过缓存存活时间两次调用之间的实际时间差
同一业务命中率不稳定并发太散,前缀被拆成多份同一前缀的请求是否集中发出
命中率正常但总价没降写得多读得少,或输入本来就很短写入量与读取量的比例

小批量试跑达标后再全量切换。全量切换后如果账单结构突变却找不到原因,回退起来会很痛苦。验证这一环多花半天,比事后翻账省事。

这些情况下缓存不值得配

  • 提示词很短、单价本来就低,节省的绝对值可能还不够你花时间调试
  • 内容一次性、天然不复用,或者每次前缀都带时间戳、随机 ID、用户昵称,命中率会长期趴在地上
  • 对时效要求极高、缓存可能返回旧内容造成业务风险的场景,宁可不用
  • 前缀很长但每个用户各不相同,写入成本摊不开,等于每次都重新写一遍

判断值不值得配,别凭感觉。用真实调用量去 /tools/model-cost-calculator 估一遍再决定,把最坏情况(命中率为零、全是写入)也算进去,能接受再上。

缓存省的是「重复」的钱,不是「请求」的钱。没有重复,就没有节省。
下一步先拿几条真实请求算出最长公共前缀,再去官方 API 资料库核对各家的缓存写入与读取口径,然后决定开不开、怎么排顺序。

常见问题

缓存命中率高就一定省钱吗?

不一定。缓存写入本身有成本,如果同一前缀只被调用一两次,写入的开销可能超过你省下的输入费用。判断标准是前缀的复用次数:复用越多越划算,一次性调用基本不必开。

为什么我明明开了缓存,账单里没有缓存项?

常见原因是前缀没对齐(每次请求开头都变了)、内容长度没达到该平台的最低门槛,或者两次请求间隔超过了缓存存活时间。先对齐前缀,再拉长复用间隔测试,具体门槛去 /official-api 对应厂商页核对。

缓存命中这部分费用在哪里查比较准?

以你自己的用量日志为准,把缓存读、缓存写单独拆成字段统计;官方口径以 /official-api 上各家当前页面为准。第三方整理的对照可以去 /price-watch 看变动记录,但计费口径别拿二手数据当定论。

本文依据各平台公开文档与官方公告整理,只做中文归纳;具体做法、参数与限制以官方文档为准。