luoleyuan's picture
Deploy minimal app (runtime only)
5960fdf verified
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)