缓存的必要性
搜索 API 调用通常有以下特点:
- 成本:每次调用消耗 API 配额
- 延迟:网络请求需要 2-10 秒
- 重复性:相同查询可能多次出现
缓存的好处
| 方面 | 无缓存 | 有缓存 |
|---|---|---|
| API 调用次数 | 每次都调用 | 重复查询复用 |
| 响应速度 | 2-10 秒 | < 100ms |
| API 成本 | 按次数计费 | 节省 50-80% |
| 用户体验 | 等待时间长 | 即时响应 |
适用场景
适合缓存:
- ✅ 事实性查询(”React 作者是谁”)
- ✅ 技术文档查询(”TypeScript 泛型”)
- ✅ 历史信息查询(”2024 年奥运会”)
不适合缓存:
- ❌ 实时价格查询(”比特币当前价格”)
- ❌ 最新新闻查询(”今天头条”)
- ❌ 时间敏感查询(”现在天气”)
SearchCache 类设计
1 | // src/tools/builtin/search-cache.ts |
缓存条目结构
1 | export interface CacheEntry { |
核心方法实现
生成缓存键
1 | /** |
标准化示例:
1 | "React 19 新特性" → "react 19 新特性" |
获取缓存
1 | /** |
设置缓存
1 | /** |
删除缓存
1 | /** |
缓存统计
统计信息结构
1 | export interface CacheStats { |
获取统计
1 | /** |
打印统计
1 | /** |
输出示例:
1 | [缓存统计] |
TTL 管理
TTL 选择策略
1 | // 根据查询类型选择 TTL |
过期清理
1 | /** |
自动清理策略
1 | // 定时清理(可选) |
全局缓存实例
使用单例模式提供全局缓存:
1 | /** |
在工具中使用
1 | // src/tools/builtin/search.ts |
缓存效果示例
场景 1:重复查询
1 | 用户: React 19 有什么新特性? |
场景 2:缓存统计
1 | 用户: 查看缓存统计 |
小结
本节介绍了搜索结果缓存机制的实现:
- 缓存的必要性和适用场景
- SearchCache 类设计
- 核心方法实现(get/set/delete)
- TTL 管理策略
- 缓存统计和监控
- 全局缓存实例
导航
上一篇: 12.3 搜索工具实现
下一篇: 12.5 搜索场景与最佳实践