from __future__ import annotations import json from dataclasses import dataclass import redis from .config import settings @dataclass(frozen=True) class Cache: client: redis.Redis def get_json(self, key: str) -> dict | None: try: v = self.client.get(key) if v is None: return None return json.loads(v) except redis.RedisError: return None def set_json(self, key: str, value: dict, ttl_seconds: int) -> None: try: self.client.set(key, json.dumps(value, ensure_ascii=False), ex=ttl_seconds) except redis.RedisError: return def get_cache() -> Cache: client = redis.Redis.from_url(settings.redis_url, decode_responses=True) return Cache(client=client)