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