import redis from dotenv import load_dotenv import os import pickle import logging logging.basicConfig( level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s', handlers=[logging.FileHandler('logs/cache.log', encoding='utf-8'), logging.StreamHandler()] ) logger = logging.getLogger(__name__) load_dotenv() class RedisCache: def __init__(self): try: self.client = redis.Redis( host=os.getenv('REDIS_HOST', 'localhost'), port=int(os.getenv('REDIS_PORT', 6379)), db=0, decode_responses=False ) self.client.ping() logger.info("Connected to Redis") except Exception as e: logger.error(f"Failed to connect to Redis: {e}") raise def get(self, key): try: value = self.client.get(key) if value: return pickle.loads(value) return None except Exception as e: logger.error(f"Error retrieving from cache: {e}") return None def set(self, key, value, ttl=7200): try: self.client.setex(key, ttl, pickle.dumps(value)) except Exception as e: logger.error(f"Error setting cache: {e}")