生图API 怎么避免重复计费?加一层结果缓存和请求去重(nano-banana-pro 实践)
有个月对账我发现出图次数比预期高了三成。查下来原因很蠢同样的提示词被重复调用了。重复是怎么产生的三个来源都很常见一、用户手抖。生成按钮点了没反应其实在跑用户又点一次两个一模一样的请求同时打出去。二、重试打偏。网络超时触发重试但服务端其实已经生成成功了只是响应没回来。重试等于又生成一张。三、批量任务重跑。跑到一半挂了重跑的时候没有断点前面成功的那些又生成了一遍。三种加起来浪费的比例相当可观。解法一个 key 管两件事给每次请求算一个内容指纹用它同时做缓存和去重。const crypto require(crypto); function fingerprint({ model, prompt, aspect, size, refImage }) { return crypto.createHash(sha256) .update(JSON.stringify({ model, prompt, aspect, size, refImage: refImage || })) .digest(hex); }关键是把所有影响出图结果的参数都算进去。漏掉aspect_ratio的话同一句提示词出方图和长图会撞成同一个 key取到错的缓存。缓存 在途去重const cache new Map(); // fp - 结果 const inflight new Map(); // fp - 正在跑的 Promise async function genImage(params) { const fp fingerprint(params); // 1) 已经生成过直接返回 if (cache.has(fp)) return cache.get(fp); // 2) 正在生成中复用同一个 Promise —— 这一步挡住了「用户连点两次」 if (inflight.has(fp)) return inflight.get(fp); const p callGenApi(params) .then((r) { cache.set(fp, r); return r; }) .finally(() inflight.delete(fp)); inflight.set(fp, p); return p; }inflight这层比缓存还重要。缓存只能挡住已经跑完的重复而用户连点、并发重试制造的是同时发出的重复——那时候缓存里什么都没有只有在途表能挡住。什么时候不该走缓存得留一个绕过缓存的口子否则用户会困惑我就是想换一张为什么每次都给我同一张。async function genImage(params, { noCache false } {}) { if (noCache) return callGenApi(params); // ... }界面上的「重新生成」按钮走noCache: true正常路径走缓存。持久化内存 Map 重启就没了批量任务重跑的场景挡不住。生产上建议落到 Redis 或数据库key指纹value图片地址 生成时间TTL按图床的链接有效期定别缓存得比链接还久该服务返回的是图片链接如果你把图转存到了自己的存储缓存里存自己的地址就不用担心过期问题。上线之后重复调用基本归零那三成的额外消耗省下来了。顺带的好处是用户体验变好了连点两次不会等两倍时间第二次直接复用第一次的结果秒返回。这类优化投入很小——核心逻辑就上面那二十来行——但账单和体验都能立刻看到变化属于性价比很高的一类活。接口服务甜甜圈APIdashengfenshen.cn

相关新闻

微信生态集成Claude Code:AI编程助手实战指南

微信生态集成Claude Code:AI编程助手实战指南

1. 项目背景:当微信遇上Claude Code最近在开发者圈子里流传着一个有趣的现象:不少技术团队不再满足于简单调用微信API开发常规功能,而是开始尝试将Claude Code这类AI编程助手深度集成到微信生态中。这让我想起五年前微信小程序刚推出时的场景…

2026/10/8 6:37:39 阅读更多 →
Django 全栈组件框架 Tetra 快速上手:4 步跑通第一个交互组件

Django 全栈组件框架 Tetra 快速上手:4 步跑通第一个交互组件

Django 全栈组件框架 Tetra 快速上手:4 步跑通第一个交互组件 【免费下载链接】tetra Tetra - A full stack component framework for Django using Alpine.js 项目地址: https://gitcode.com/gh_mirrors/tetra/tetra 假设你正在用 Django 做一个后台管理页面…

2026/9/28 17:27:30 阅读更多 →
5 分钟搞定 Windows 与 Office 激活:KMS_VL_ALL_AIO 一键激活终极指南

5 分钟搞定 Windows 与 Office 激活:KMS_VL_ALL_AIO 一键激活终极指南

5 分钟搞定 Windows 与 Office 激活:KMS_VL_ALL_AIO 一键激活终极指南 【免费下载链接】KMS_VL_ALL_AIO Smart Activation Script 项目地址: https://gitcode.com/gh_mirrors/km/KMS_VL_ALL_AIO 上个月帮表哥修电脑,重装完系统正要收工&#xff0…

2026/10/9 21:29:20 阅读更多 →

最新新闻

不是 Cursor 不够强,是 Claude Code 太猛了:用 TaoToken 统一 Key 跑通 agentic coding 工作流

不是 Cursor 不够强,是 Claude Code 太猛了:用 TaoToken 统一 Key 跑通 agentic coding 工作流

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/12 10:08:58 阅读更多 →
动态库与静态库全解析:从原理到Qt与ONNX Runtime集成实践

动态库与静态库全解析:从原理到Qt与ONNX Runtime集成实践

1. 先搞清楚:动态库和静态库到底解决了什么问题做C/C开发的人,几乎绕不开链接(link)这个过程。你写了一堆源文件,编译器把它们编译成目标文件(.o或.obj),最后需要把这些目标文件组合…

2026/10/12 10:08:58 阅读更多 →
机器学习入门:从问题分类到模型评估的完整指南

机器学习入门:从问题分类到模型评估的完整指南

1. 从"调包"到"懂行":为什么基础概念决定了你走多远很多人学机器学习的第一反应是找一份"30天速成"的教程,然后照着敲几行sklearn的代码,跑出一个准确率数字,就觉得自己"入门"了。我带过…

2026/10/12 10:08:58 阅读更多 →
嵌入式Linux根文件系统构建:BusyBox编译配置与启动实战

嵌入式Linux根文件系统构建:BusyBox编译配置与启动实战

1. 从一个尴尬的启动日志说起第一次在自制的板子上跑通内核之后,我盯着串口终端里最后一行Kernel panic - not syncing: No working init found愣了很久。内核明明已经跑起来了,CPU、内存、串口驱动都正常,为什么就是进不了系统?后…

2026/10/12 10:08:58 阅读更多 →
AI芯片软硬件协同设计:数据流、量化与编译器协同优化实践

AI芯片软硬件协同设计:数据流、量化与编译器协同优化实践

1. 从"能跑模型"到"跑得高效":AI芯片软硬件协同设计的核心命题很多人第一次接触AI芯片,注意力都放在算力数字上——多少TOPS、多少TFLOPS、功耗多少瓦。但真正做过芯片落地的人都知道,纸面算力只是入场券,能不…

2026/10/12 10:08:58 阅读更多 →
PID算法C语言模拟演示:从原理到嵌入式实战

PID算法C语言模拟演示:从原理到嵌入式实战

我注意到您提供了一段内容,但其中没有明确的指令或问题。如果您是想让我基于某个项目标题(如“PID算法C语言模拟演示”)撰写一篇博文,请直接告诉我具体需求,我会按照您的要求完成。如果您有其他需要帮助的事情&#xf…

2026/10/12 10:07:56 阅读更多 →

日新闻

复古胶片颗粒感噪点合成器:Canvas ImageData 像素高斯杂色注入算法

复古胶片颗粒感噪点合成器:Canvas ImageData 像素高斯杂色注入算法

在数码相机、高清显示屏与现代矢量图形技术高度发达的今天,画面可以做到绝对的锐利、平滑与无瑕。然而,当一张秋日手账插画或拍立得照片过于“平整无瑕”时,往往会散发出一种冰冷生硬的“数码塑料感(Digital Plasticity&#xff0…

2026/10/12 0:00:59 阅读更多 →
活字印刷古籍线装排版:Canvas 竖排文字与栏线自适应算法

活字印刷古籍线装排版:Canvas 竖排文字与栏线自适应算法

在现代网页与移动端设计中,横排(Horizontal Layout)早已经成为了绝对的主流。然而,当我们翻开泛黄的线装古籍、宋版木刻诗集,或是欣赏一张茶道雅集的手写便签时,那种**自上而下纵向书写、自右向左逐列铺展&…

2026/10/12 0:00:59 阅读更多 →
周日晚间的“精神松绑减震器”:无压力情绪倾倒箱与温和轻声陪伴

周日晚间的“精神松绑减震器”:无压力情绪倾倒箱与温和轻声陪伴

每到周日的晚上八点到十点,很多人心里都会悄悄亮起一盏警示灯。 在心理学上,这种现象有一个专门的称谓——“周日夜晚焦虑症(Sunday Scaries)”。明天又是周一,闹钟又要重新在七点响彻卧房;脑海里仿佛有一个…

2026/10/12 0:00:59 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/12 0:16:30 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/12 0:16:38 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/12 0:16:43 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/11 10:45:37 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/11 14:36:53 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/11 14:36:54 阅读更多 →