Files
yoyo/internal/cache/key.go

64 lines
1.7 KiB
Go
Raw Normal View History

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[:])
}