技术博客
免费脑筋急转弯接口的题库去重与本地缓存策略

免费脑筋急转弯接口的题库去重与本地缓存策略

作者: 万维易源
2026-08-31
脑筋急转弯API指南免费接口
# 免费脑筋急转弯接口的题库去重与本地缓存策略 > 接口/接入点:脑筋急转弯(1618,1618-2 / 1618-3) · 免费服务 · 返回 JSON · 适用人群:已接入、关注成本与体验的开发者 · 阅读时间约 6 分钟 ## 核心要点 - 随机接口(1618-3)不保证去重,一次取多条或多次调用都可能出现重复题;本地用 `question` 做 Set 去重。 - 题库总量固定(实测约 11067),适合"一次性建本地索引 + 定期增量更新",大幅减少重复调用、守住免费档位。 - 缓存键设计:`question` 作唯一键;列表接口分页结果按 `page` 维度缓存。 ## Why:为什么需要去重与缓存 免费接口有使用档次限制。每次出题都打接口,既浪费档位,又可能给用户重复题影响体验。去重解决"重复题",缓存解决"重复调用"——两者一起做,体验与成本双赢。 ## What:接口与前置 | 项目 | 说明 | |------|------| | 用到接入点 | 1618-2(建索引)、1618-3(实时出题) | | 前置 | 有效 AppKey;本地存储(文件/Redis 均可) | ## How:去重 + 缓存 本地去重(每次取题后过滤已出过的): ```python import requests seen = set() # 实际项目里持久化到 Redis/DB def next_unique(n=1): r = requests.get("https://route.showapi.com/1618-3", params={"appKey": "YOUR_APPKEY", "len": str(n * 3)}, timeout=10) # 多取一些便于去重 body = r.json()["showapi_res_body"] out = [] for it in body["list"]: if it["question"] not in seen: seen.add(it["question"]); out.append(it) if len(out) >= n: break return out ``` 一次性建本地题库索引(用 1618-2 分页遍历,详见分页指南),之后随机出题从本地抽,只在本地库 depleted 时回源。 cURL(验证取题): ```bash curl -s --max-time 10 "https://route.showapi.com/1618-3?appKey=YOUR_APPKEY&len=5" ``` ## 返回示例与解析 返回 `list` 数组(见字段全解)。去重依据是 `question` 文本;`answer` 可能含标点/换行,比较时用 `question` 更稳定。 ## 进阶 / 边界 - 缓存失效:题库由服务端维护,可能增删;建议本地索引带"最后更新时间",每日/每周增量同步一次,而非永久不回源。 - 档位保护:建索引是一次性的大请求量操作,请在档位内、控频执行;日常出题走本地,几乎不消耗接口档位。 - 不要缓存 `showapi_fee_num` 之类计数字段当业务数据。 ## FAQ **Q1:随机接口一定会重复吗?** 不保证不重复,多题/多次场景大概率遇到,需本地去重。 **Q2:本地题库和官方不同步怎么办?** 带更新时间戳,定期增量同步即可。 **Q3:缓存能省多少调用?** 日常出题若全部本地抽,几乎零接口消耗;仅建索引与同步时回源。 **Q4:`question` 能做唯一键吗?** 可以,作为去重与缓存键稳定可靠。 ## 相关能力 / 下一步阅读 - [脑筋急转弯两个接入点返回结构差异:contentlist 与 list 别搞混](https://www.showapi.com/guides/brainteaser-return-diff-1618) - [脑筋急转弯免费接口的档位与限流说明:免费不等于无限](https://www.showapi.com/guides/brainteaser-free-tier-1618) - [用脑筋急转弯 API 做个随机出题+计分小游戏(H5/小程序)](https://www.showapi.com/guides/brainteaser-random-quiz-game-1618) - **本系列共 12 篇**:查看[脑筋急转弯 API 指南总目录](https://www.showapi.com/guides/brainteaser-guides-1618)