缓存键包含所有影响结果的参数
Cache keys encode response-changing inputs
把会改变响应的输入都纳入缓存键,避免返回其他请求的旧结果。
以下示例与示意结果由本站编写,用于说明方法,不是模型实测结果。
使用场景
租户TA和TB访问同一个报告URL,地区和权限也不同。仅用URL缓存会把首个查看者的响应给其他请求;教学缓存键必须包含实际影响可见结果的上下文。
具体做法
追响应依赖,列报告/数据版本、租户、查看者或有效授权范围、语言/地区及功能状态。用无歧义编码构造键,敏感信息不直接写日志;定义新鲜度和失效/版本策略。每次授权仍核当前权限,不能用缓存旧许可代替;关键实时数据不在未满足契约时缓存。内容哈希仅适合结果只依赖相同内容和配置的情况。
反例
用/report作唯一键,TA中文管理员响应复用给TB英文普通用户,称性能提高。
改进写法
为教学报告按版本、tenant、locale和实际权限/查看者依赖构造键,TA/zh/admin与TB/en/member不可共用。声明陈旧窗口及变更策略,权限变更后重核;记录命中身份,不暴露秘密或把路径哈希视为万能键。
为什么这样改
缓存复用隐含“这些输入结果相同”,漏掉依赖就可能返回错身份数据。完整键与新鲜度策略使性能收益不以响应正确性为代价。
如何验证
教学相同上下文可命中,不同租户/语言/权限各自缺失;数据版本变化不得用旧键返回。撤销权限后不能继续读旧管理员响应。检查输出与请求身份,不能只看缓存命中率。
适用边界
依赖集合可能动态变化,键完整不等于授权正确。高基数与戳穿需独立性能设计,TTL也不保证实时正确。源示例禁止陈旧场景应结合实际契约,不能用冻结费率或性能数作现行结论。
原文与版本
- addyosmani/agent-skills · Cache keys encode response-changing inputs
查看此版本的文件9d0c60d406b4 - affaan-m/ECC · Problem / Solution
查看此版本的文件ef648e01899b - affaan-m/ECC · Parameters beyond content require a different cache contract
查看此版本的文件ef648e01899b - affaan-m/ECC · Reuse a shared dependency cache only for matching manifest and lockfile fingerprints; diverged links become independent
查看此版本的文件ef648e01899b