Spaces:
Running
Running
File size: 1,263 Bytes
aceffd1 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 | 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))
|