Spaces:
Paused
Paused
| import redis | |
| import json | |
| from ..core.config import settings | |
| from typing import Any, Optional | |
| class RedisCache: | |
| def __init__(self): | |
| self.redis_client = redis.Redis( | |
| host=settings.REDIS_HOST, | |
| port=settings.REDIS_PORT, | |
| decode_responses=True | |
| ) | |
| async def set_cache(self, key: str, value: Any, expire: int = 3600): | |
| """Set a cache entry with optional expiration time (default 1 hour)""" | |
| try: | |
| self.redis_client.setex( | |
| key, | |
| expire, | |
| json.dumps(value) | |
| ) | |
| return True | |
| except Exception as e: | |
| print(f"Cache set error: {str(e)}") | |
| return False | |
| async def get_cache(self, key: str) -> Optional[Any]: | |
| """Get a cached value by key""" | |
| try: | |
| value = self.redis_client.get(key) | |
| return json.loads(value) if value else None | |
| except Exception as e: | |
| print(f"Cache get error: {str(e)}") | |
| return None | |
| async def delete_cache(self, key: str) -> bool: | |
| """Delete a cache entry by key""" | |
| try: | |
| return bool(self.redis_client.delete(key)) | |
| except Exception as e: | |
| print(f"Cache delete error: {str(e)}") | |
| return False | |
| async def clear_cache_pattern(self, pattern: str) -> bool: | |
| """Clear all cache entries matching a pattern""" | |
| try: | |
| keys = self.redis_client.keys(pattern) | |
| if keys: | |
| return bool(self.redis_client.delete(*keys)) | |
| return True | |
| except Exception as e: | |
| print(f"Cache clear error: {str(e)}") | |
| return False | |
| cache = RedisCache() |