feat: 添加本地缓存功能,减少API调用

- 实现SQLite缓存模块,支持高效查询和存储
- 添加缓存键生成策略(基于原文+语言对的SHA256哈希)
- 集成缓存到Translator类,先查缓存再调用API
- 添加缓存管理命令:cache clear, cache stats, cache cleanup
- 实现组合缓存清理策略(数量限制+时间过期)
- 添加完整的单元测试
- 更新配置文件模板,添加缓存配置
- 更新文档和版本记录

版本: v0.5.1
This commit is contained in:
2026-03-29 21:10:28 +08:00
parent ceed482444
commit b71f76c8b3
15 changed files with 1545 additions and 7 deletions

View File

@@ -9,7 +9,7 @@
## 未来架构想法
- [ ] 支持流式翻译输出
- [ ] 添加本地缓存减少API调用
- [x] 添加本地缓存减少API调用 ✅ 已完成
- [ ] 实现插件系统支持自定义厂商
- [ ] 支持批量翻译文件
- [ ] 添加Web界面可选
@@ -32,6 +32,128 @@
## 版本历史
### 0.5.0 (2026-03-29) - 本地缓存功能
**类型**: 功能版本
**状态**: 已发布
**变更内容**:
- ✅ 添加本地缓存模块 (internal/cache/)
- ✅ 实现SQLite缓存存储层支持高效查询和存储
- ✅ 实现缓存键生成策略(基于原文+语言对的SHA256哈希
- ✅ 修改Translator类集成缓存功能先查缓存再调用API
- ✅ 添加缓存配置到Config结构支持自定义缓存参数
- ✅ 实现缓存管理命令cache clear, cache stats, cache cleanup
- ✅ 添加组合缓存清理策略(数量限制+时间过期)
- ✅ 更新配置文件模板,添加缓存配置示例
- ✅ 更新帮助文档,添加缓存相关命令说明
**技术实现**:
- 使用 `github.com/mattn/go-sqlite3` 作为SQLite驱动
- 实现缓存接口 (Cache interface),支持多种存储后端
- 缓存表包含完整字段原文、译文、语言对、模型、Prompt、用量统计
- 自动清理过期缓存和超出数量限制的缓存
- 异步保存缓存,不阻塞翻译结果返回
**使用示例**:
```bash
# 基本翻译(自动使用缓存)
yoyo "Hello world"
yoyo "Hello world" # 第二次调用将从缓存返回
# 缓存管理命令
yoyo cache clear # 清空翻译缓存
yoyo cache stats # 查看缓存统计信息
yoyo cache cleanup # 清理过期缓存
```
**配置示例**:
```yaml
cache:
enabled: true # 是否启用缓存
max_records: 10000 # 最大缓存记录数
expire_days: 30 # 缓存过期天数
db_path: "~/.config/yoyo/cache.db" # 缓存数据库文件路径
```
**讨论记录**:
- [本地缓存功能设计](taolun.md#2026-03-29-1500-版本-050-本地缓存功能设计)
**下一步**:
- 完善缓存功能测试
- 添加缓存命中率统计
- 实现按语言清理缓存功能
- 优化缓存性能
---
### 0.5.1 (2026-03-29) - 缓存功能修复
**类型**: 修复版本
**状态**: 已发布
**变更内容**:
- ✅ 修复缓存清空命令中的VACUUM事务错误
- ✅ 修复缓存统计中的NULL值处理错误
- ✅ 修复缓存过期清理策略支持expire_days=0时清理所有记录
- ✅ 添加缓存模块单元测试
- ✅ 更新版本号到v0.5.1
**修复问题**:
- 缓存清空命令执行时出现"cannot VACUUM from within a transaction"错误
- 缓存统计查询在空表时出现NULL值转换错误
- 缓存过期清理策略在expire_days=0时不工作
**测试结果**:
- 所有缓存模块测试通过
- 缓存命令功能正常
- 缓存集成功能正常
**下一步**:
- 完善缓存功能测试
- 添加缓存命中率统计
- 实现按语言清理缓存功能
- 优化缓存性能
---
### 0.4.0 (2026-03-29) - 管道符功能
**类型**: 功能版本
**状态**: 已发布
**变更内容**:
- ✅ 添加管道符支持,允许与其他命令行工具联合使用
- ✅ 实现管道输入检测 (isPipeInput函数)
- ✅ 实现从标准输入读取 (readFromStdin函数)
- ✅ 添加 --quiet 和 -q 参数控制统计信息输出
- ✅ 更新帮助文档,添加管道使用示例
- ✅ 修复 content/filter.go 中的正则表达式错误
- ✅ 更新版本号到 v0.3.0
**使用示例**:
```bash
# 管道翻译文件
cat file.txt | yoyo
cat file.txt | yoyo --lang=en
# 管道翻译命令输出
echo "Hello world" | yoyo --lang=cn
# 静默模式,只输出翻译结果
echo "Hello world" | yoyo -q
# 与其他命令组合使用
cat file.txt | yoyo | grep "关键词"
yoyo "Hello" | wc -l
```
**讨论记录**:
- [管道符功能设计](taolun.md#管道符功能设计)
**下一步**:
- 实现更多厂商火山引擎、国家超算、Qwen、OpenAI兼容
- 添加配置文件路径查找机制
- 实现配置文件迁移工具
- 完善错误处理和用户体验
### 0.3.0 (2026-03-29) - 内容过滤与代码处理
**类型**: 功能版本
**状态**: 已发布