import asyncio import json import hashlib import logging from typing import Optional import redis.asyncio as aioredis from app.core.config import settings logger = logging.getLogger(__name__) class RedisCache: def __init__(self): self.redis: Optional[aioredis.Redis] = None async def connect(self): if not self.redis: self.redis = aioredis.from_url(settings.REDIS_URL, encoding="utf-8", decode_responses=True) logger.info("Подключение к Redis установлено.") async def disconnect(self): if self.redis: await self.redis.close() logger.info("Подключение к Redis закрыто.") async def get(self, key: str): if not self.redis: await self.connect() value = await self.redis.get(key) logger.debug(f"Получено из кеша по ключу {key}: {value}") return value async def set(self, key: str, value: str, expire: int = 3600): if not self.redis: await self.connect() await self.redis.set(key, value, ex=expire) logger.debug(f"Сохранено в кеш по ключу {key}: {value} с истечением {expire} секунд") cache = RedisCache()