35 lines
865 B
Python
35 lines
865 B
Python
import hashlib
|
|
import json
|
|
import os
|
|
from typing import Optional
|
|
|
|
_client = None
|
|
|
|
|
|
def _get_client():
|
|
global _client
|
|
if _client is None:
|
|
import redis
|
|
url = os.environ.get("REDIS_URL", "redis://localhost:6379")
|
|
_client = redis.from_url(url, decode_responses=True)
|
|
return _client
|
|
|
|
|
|
def cache_key(image_bytes: bytes) -> str:
|
|
return f"identify:{hashlib.sha256(image_bytes).hexdigest()}"
|
|
|
|
|
|
def get(image_bytes: bytes) -> Optional[list]:
|
|
try:
|
|
value = _get_client().get(cache_key(image_bytes))
|
|
return json.loads(value) if value else None
|
|
except Exception:
|
|
return None
|
|
|
|
|
|
def set(image_bytes: bytes, results: list, ttl: int = 604800) -> None:
|
|
try:
|
|
_get_client().setex(cache_key(image_bytes), ttl, json.dumps(results))
|
|
except Exception:
|
|
pass # cache indisponible → silencieux
|