feat: 添加本地缓存功能,减少API调用
- 实现SQLite缓存模块,支持高效查询和存储 - 添加缓存键生成策略(基于原文+语言对的SHA256哈希) - 集成缓存到Translator类,先查缓存再调用API - 添加缓存管理命令:cache clear, cache stats, cache cleanup - 实现组合缓存清理策略(数量限制+时间过期) - 添加完整的单元测试 - 更新配置文件模板,添加缓存配置 - 更新文档和版本记录 版本: v0.5.1
This commit is contained in:
63
internal/cache/key.go
vendored
Normal file
63
internal/cache/key.go
vendored
Normal file
@@ -0,0 +1,63 @@
|
||||
package cache
|
||||
|
||||
import (
|
||||
"crypto/sha256"
|
||||
"encoding/hex"
|
||||
"fmt"
|
||||
"strings"
|
||||
)
|
||||
|
||||
// GenerateCacheKey 生成缓存键
|
||||
// 使用原文+语言对进行SHA256哈希
|
||||
func GenerateCacheKey(originalText, fromLang, toLang string) string {
|
||||
// 规范化语言代码
|
||||
fromLang = normalizeLanguageCode(fromLang)
|
||||
toLang = normalizeLanguageCode(toLang)
|
||||
|
||||
// 规范化原文
|
||||
normalizedText := normalizeText(originalText)
|
||||
|
||||
// 生成缓存键
|
||||
data := fmt.Sprintf("%s|%s|%s", normalizedText, fromLang, toLang)
|
||||
hash := sha256.Sum256([]byte(data))
|
||||
return hex.EncodeToString(hash[:])
|
||||
}
|
||||
|
||||
// normalizeLanguageCode 规范化语言代码
|
||||
func normalizeLanguageCode(lang string) string {
|
||||
if lang == "" || lang == "auto" {
|
||||
return "auto"
|
||||
}
|
||||
return strings.ToLower(strings.TrimSpace(lang))
|
||||
}
|
||||
|
||||
// normalizeText 规范化文本
|
||||
// 移除多余的空白字符,确保相同的文本生成相同的哈希
|
||||
func normalizeText(text string) string {
|
||||
// 移除首尾空白
|
||||
text = strings.TrimSpace(text)
|
||||
|
||||
// 将多个连续空白字符替换为单个空格
|
||||
text = strings.Join(strings.Fields(text), " ")
|
||||
|
||||
return text
|
||||
}
|
||||
|
||||
// GenerateCacheKeyWithModel 生成包含模型信息的缓存键
|
||||
// 如果需要更精确的缓存,可以使用这个函数
|
||||
func GenerateCacheKeyWithModel(originalText, fromLang, toLang, model string) string {
|
||||
// 规范化语言代码
|
||||
fromLang = normalizeLanguageCode(fromLang)
|
||||
toLang = normalizeLanguageCode(toLang)
|
||||
|
||||
// 规范化原文
|
||||
normalizedText := normalizeText(originalText)
|
||||
|
||||
// 规范化模型名称
|
||||
model = strings.ToLower(strings.TrimSpace(model))
|
||||
|
||||
// 生成缓存键
|
||||
data := fmt.Sprintf("%s|%s|%s|%s", normalizedText, fromLang, toLang, model)
|
||||
hash := sha256.Sum256([]byte(data))
|
||||
return hex.EncodeToString(hash[:])
|
||||
}
|
||||
Reference in New Issue
Block a user