39 lines
1.0 KiB
Python
39 lines
1.0 KiB
Python
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
|