feat:初版

This commit is contained in:
2025-12-25 18:41:09 +08:00
commit 1429e0e66a
52 changed files with 2688 additions and 0 deletions

View File

@@ -0,0 +1,53 @@
import hashlib
import json
import redis.asyncio as redis
from ..core import get_settings
settings = get_settings()
class CacheService:
def __init__(self):
self.redis: redis.Redis | None = None
async def connect(self):
self.redis = redis.from_url(settings.redis_url)
async def disconnect(self):
if self.redis:
await self.redis.close()
def _make_key(
self,
source_text: str,
source_lang: str,
target_lang: str,
style: str,
glossary_version: str | None = None,
model_version: str | None = None,
) -> str:
normalized = source_text.strip().lower()
content = f"{normalized}:{source_lang}:{target_lang}:{style}"
if glossary_version:
content += f":{glossary_version}"
if model_version:
content += f":{model_version}"
hash_val = hashlib.sha256(content.encode()).hexdigest()[:16]
return f"tr:{hash_val}"
async def get(self, key: str) -> dict | None:
if not self.redis:
return None
data = await self.redis.get(key)
if data:
return json.loads(data)
return None
async def set(self, key: str, value: dict, ttl: int | None = None):
if not self.redis:
return
ttl = ttl or settings.cache_ttl_seconds
await self.redis.set(key, json.dumps(value), ex=ttl)
cache_service = CacheService()