feat:初版
This commit is contained in:
53
apps/api/app/services/cache.py
Normal file
53
apps/api/app/services/cache.py
Normal 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()
|
||||
Reference in New Issue
Block a user