金店参考价格:金价每日 13:40 更新,如何设计缓存策略节省调用成本
# 金店参考价格:金价每日 13:40 更新,如何设计缓存策略节省调用成本
> 接口 2145(金店参考价格)· 免费但有档位限流 · 适用人群:已接入用户、架构师 · 阅读时间约 5 分钟
## 核心要点
- 最新价格每天仅 13:40 更新一次,因此同一天的重复查询可安全缓存。
- 按「品牌 _id」做缓存键,TTL 设为到次日 13:40 之后刷新。
- 品牌清单(2145-1)更新更慢,可缓存数天,进一步减少调用。
## Why:这跟我有什么关系
接口虽免费,但有使用档位限制。金价一天只变一次,如果每次页面打开都打接口,既浪费档位又拖慢响应。合理的缓存能同时满足「省钱」和「快」。
## What:前置条件与接口速览
**两种数据的缓存节奏**
| 数据 | 更新频率 | 建议缓存 |
|---|---|---|
| 品牌清单(2145-1) | 每年不定期 | 服务端缓存 1~7 天,失效回源 |
| 金价(2145-2) | 每天 13:40 | 按 _id 缓存,TTL 到次日 13:50 强制刷新 |
## How:接入步骤
**Redis 缓存示例(金价)**
```python
import redis, requests, time
r = redis.Redis()
def get_price(appkey, brand_id):
key = f"gold:{brand_id}"
cached = r.get(key)
if cached:
return cached.decode() # 当天 13:40 前不会变
body = requests.post("https://route.showapi.com/2145-2",
params={"appKey": appkey},
data={"id": brand_id}, timeout=10).json()["showapi_res_body"]
if body["ret_code"] != 0:
return None
# TTL 设到明天 13:50,确保跨过 13:40 更新点
ttl = int((next_day_1350() - time.time()))
r.setex(key, ttl, str(body["goldPrice"]))
return body["goldPrice"]
```
## 返回示例与解析
**缓存命中示意**
```
请求金价 -> Redis 命中 -> 直接返回(0 次接口调用)
请求金价 -> Redis 未命中 -> 调 2145-2 -> 写缓存 -> 返回
```
完整字段与状态码见[金店参考价格:返回字段与状态码全解](https://www.showapi.com/guides/gold-price-response-codes-2145)。
## 进阶 / 边界
- 缓存的是「当天报价」,不是实时行情;展示时标注「参考价 / 数据日期」更稳妥。
- 免费档位下,全品牌遍历(N 次 2145-2)建议凌晨 13:40 后批量预热,避免白天峰值触发限流。
- 缓存失效策略要跨过 13:40 更新点,否则可能一直读到旧价。
## FAQ
**Q:缓存一天会不会拿到过时价格?**
不会过时,因为接口本身每天只在 13:40 更新一次。缓存到次日 13:40 后刷新,与官方更新节奏一致。
**Q:品牌清单也要缓存吗?**
建议缓存。2145-1 每年才不定期更新一次,缓存 1~7 天可显著减少调用。
**Q:免费接口为什么还要省调用?**
免费但有使用档位限制,超额会被限流;缓存既保稳定又避免触顶。具体档位以官方说明为准。
## 相关能力 / 下一步阅读
- [金店参考价格:高并发 / 批量集成架构](https://www.showapi.com/guides/gold-price-architecture-2145)
- [金店参考价格:两步调用工作流](https://www.showapi.com/guides/gold-price-two-step-2145)
- [金店参考价格:返回字段与状态码全解](https://www.showapi.com/guides/gold-price-response-codes-2145)
- **本系列共 12 篇**:查看[金店参考价格 · 官方指南总目录](https://www.showapi.com/guides/gold-price-guides-2145)