技术博客
二维码生成和识别:图片每 12 小时清理,如何设计保存与缓存策略

二维码生成和识别:图片每 12 小时清理,如何设计保存与缓存策略

作者: 万维易源
2026-08-31
二维码保存12小时清理缓存CDN
# 二维码生成和识别:图片每 12 小时清理,如何设计保存与缓存策略 > 接口/接入点:二维码生成和识别(apiCode=887,生成接入点 887-1)· 是否免费:是 · 返回格式:JSON · 适用人群:已上生产的开发者、架构师 · 阅读时间:约 5 分钟 ## 核心要点 - 生成图存 ShowAPI 服务器,**每 12 小时删除数据**,必须生成即下载到自有存储。 - 推荐链路:生成 → 立即下载 → 存对象存储(OSS)/本地 → CDN 加速访问。 - 相同 content 可缓存复用,避免重复调用与重复出图。 ## Why:不保存,二维码迟早"打不开" 很多团队把 `imgUrl` 直接写进数据库、前端长期展示,结果用户一周后扫码发现图 404——因为图已被清理。这条边界是生产事故高发点,必须前置处理。 ## What:保存时效事实 | 项 | 说明 | |----|------| | 存储位置 | ShowAPI 服务器(非你的存储) | | 清理周期 | 每 12 小时删除 | | 你的责任 | 生成后及时下载并落盘到自有存储 | > 来源:生成接入点说明"图片存放于 showapi 服务器,可能不定期清理,建议及时保存"及"每 12 个小时删除数据"。 ## How:生成即落盘(Python + 对象存储思路) ```python import requests, hashlib API = "https://route.showapi.com/887-1" APPKEY = "YOUR_APPKEY" def ensure_qr(content): # 1) 先查本地缓存(相同 content 复用) key = hashlib.md5(content.encode()).hexdigest() cached = local_cache_get(key) if cached: return cached # 自有存储地址 # 2) 调用生成 resp = requests.post(API, params={"appKey": APPKEY}, data={"content": content}, timeout=10) body = resp.json()["showapi_res_body"] if body.get("ret_code") != "0": raise RuntimeError(body.get("msg")) # 3) 立即下载并落盘到自有存储(OSS/本地),切勿只存 imgUrl img = requests.get(body["imgUrl"], timeout=10).content own_url = oss_upload(img, f"qr/{key}.png") # 伪函数:上传到你的对象存储 local_cache_set(key, own_url) return own_url ``` ```bash # 单条:生成后顺手下载 URL=$(curl -s "https://route.showapi.com/887-1?appKey=YOUR_APPKEY" \ -d "content=https://a.com" | python -c "import sys,json;print(json.load(sys.stdin)['showapi_res_body']['imgUrl'])") curl -s "$URL" -o qr.png ``` ## 缓存设计建议 | 层 | 作用 | 实现 | |----|------|------| | 生成缓存 | 相同 content 不重复调用 | 以 content 的 md5 为 key,存自有地址 | | 对象存储 | 持久保存图片 | OSS / S3 / 本地磁盘 | | CDN | 加速访问、减负源站 | 绑定自定义域名 | | 数据库 | 记录 content↔own_url 映射 | 便于回溯与更新 | ## 进阶 / 边界 - **不要只存 imgUrl**:12h 后失效。落盘到自有存储才是"永久"方案。 - **内容变更**:content 变了就是新二维码,按新 key 重新生成,旧图可保留或过期清理。 - **批量场景**:见[批量生成全链路](https://www.showapi.com/guides/qrcode-batch-generate-887),生成即下载。 ## FAQ **Q1:图片能一直放在 ShowAPI 吗?** A:不能,每 12h 清理。生产必须下载到自有存储。 **Q2:同一个 content 重复生成会出一样的图吗?** A:内容相同则二维码信息相同;可缓存复用,减少调用。 **Q3:本地缓存 key 用什么?** A:用 content 的哈希(如 md5)即可,相同内容命中缓存。 **Q4:下载失败怎么办?** A:下载属自有存储写入,失败需重试;建议生成与下载放在同一事务/重试链路里。 ## 相关能力 / 下一步阅读 - [二维码生成和识别:批量生成二维码的全链路设计](https://www.showapi.com/guides/qrcode-batch-generate-887) - [二维码生成和识别:10 个实战避坑清单(100KB 上限 / 12h 清理 / 格式)](https://www.showapi.com/guides/qrcode-best-practices-887) - [二维码生成和识别:5 分钟接入,从注册到生成第一个二维码](https://www.showapi.com/guides/qrcode-quickstart-887) - **本系列共 12 篇**:查看[二维码生成和识别指南总目录](https://www.showapi.com/guides/qrcode-guides-887)