Spaces:
Running
Running
| import os | |
| import json | |
| import redis | |
| from config import logger | |
| _REDIS_CLIENT = None | |
| def get_redis(): | |
| global _REDIS_CLIENT | |
| if _REDIS_CLIENT is not None: | |
| return _REDIS_CLIENT | |
| redis_url = os.getenv("REDIS_URL", "redis://localhost:6379/0") | |
| try: | |
| _REDIS_CLIENT = redis.Redis.from_url(redis_url, decode_responses=True) | |
| # Test connection | |
| _REDIS_CLIENT.ping() | |
| logger.info("Successfully connected to Redis cache.") | |
| except Exception as e: | |
| logger.warning(f"Failed to connect to Redis at {redis_url}: {e}. Falling back to in-memory mock.") | |
| _REDIS_CLIENT = MockRedis() | |
| return _REDIS_CLIENT | |
| class MockRedis: | |
| """Fallback if Redis server is down""" | |
| def __init__(self): | |
| self._data = {} | |
| def get(self, key): | |
| return self._data.get(key) | |
| def setex(self, key, time, value): | |
| self._data[key] = value | |
| def delete(self, key): | |
| self._data.pop(key, None) | |
| def ping(self): | |
| return True | |
| def cache_get_json(key): | |
| client = get_redis() | |
| val = client.get(key) | |
| if val: | |
| return json.loads(val) | |
| return None | |
| def cache_set_json(key, value, ttl=300): | |
| client = get_redis() | |
| client.setex(key, ttl, json.dumps(value)) | |