from redis import Redis from redis.backoff import NoBackoff from redis.retry import Retry from app.core.config import get_settings _client: Redis | None = None _client_key: tuple | None = None def get_redis() -> Redis: global _client, _client_key settings = get_settings() key = ( settings.redis_host, settings.redis_port, settings.redis_db, settings.redis_password, settings.redis_timeout_sec, settings.redis_ssl_enabled, ) if _client is not None and _client_key == key: return _client if _client is not None: _client.close() _client = Redis( host=settings.redis_host, port=settings.redis_port, db=settings.redis_db, password=settings.redis_password or None, socket_timeout=settings.redis_timeout_sec, socket_connect_timeout=settings.redis_timeout_sec, ssl=settings.redis_ssl_enabled, decode_responses=True, retry=Retry(NoBackoff(), 0), ) _client_key = key return _client