colibri.assistant.ai / utils /cache_manager.py
Gouzi Mohaled
ajout de l'username et passeword redis render
51b64bb
raw
history blame
2.73 kB
import redis
import json
import logging
from typing import Any, Optional
from datetime import timedelta
import os
from dotenv import load_dotenv
from utils.logging_utils import log_to_file
load_dotenv()
class CacheManager:
def __init__(self):
"""Initialise la connexion Redis"""
self.redis_client = redis.Redis(
host=os.getenv("REDIS_HOST"),
port=int(os.getenv("REDIS_PORT")),
username=os.getenv("REDIS_USERNAME"), # Ajout du nom d'utilisateur pour l'instance render
password=os.getenv("REDIS_PASSWORD"), # Ajout du mot de passe pour l'instance render
decode_responses=True # Pour automatiquement décoder les réponses en str
)
self.default_expiry = timedelta(hours=1) # Expiration par défaut : 1 heure
async def get(self, key: str) -> Optional[Any]:
"""Récupère une valeur du cache"""
try:
value = self.redis_client.get(key)
if value:
log_to_file(f"Cache hit pour la clé: {key}", level=logging.INFO)
return json.loads(value)
log_to_file(f"Cache miss pour la clé: {key}", level=logging.INFO)
return None
except Exception as e:
log_to_file(f"Erreur lors de la lecture du cache: {str(e)}", level=logging.ERROR)
return None
async def set(self, key: str, value: Any, expiry: Optional[timedelta] = None) -> bool:
"""Enregistre une valeur dans le cache"""
try:
expiry_seconds = int((expiry or self.default_expiry).total_seconds())
success = self.redis_client.setex(
key,
expiry_seconds,
json.dumps(value)
)
if success:
log_to_file(f"Valeur mise en cache pour la clé: {key}", level=logging.INFO)
return success
except Exception as e:
log_to_file(f"Erreur lors de l'écriture dans le cache: {str(e)}", level=logging.ERROR)
return False
async def delete(self, key: str) -> bool:
"""Supprime une valeur du cache"""
try:
return bool(self.redis_client.delete(key))
except Exception as e:
log_to_file(f"Erreur lors de la suppression du cache: {str(e)}", level=logging.ERROR)
return False
async def clear_all(self) -> bool:
"""Vide tout le cache"""
try:
self.redis_client.flushall()
log_to_file("Cache entièrement vidé", level=logging.INFO)
return True
except Exception as e:
log_to_file(f"Erreur lors du vidage du cache: {str(e)}", level=logging.ERROR)
return False