portfolio_opt / cache.py
engineportf's picture
Upload folder using huggingface_hub
d8c1e61 verified
Raw
History Blame Contribute Delete
1.31 kB
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))