redis_client.py 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. from redis import Redis
  2. from redis.asyncio import Redis as AsyncRedis
  3. from redis.asyncio.sentinel import Sentinel as AsyncSentinel
  4. from redis.sentinel import Sentinel
  5. from alien_gateway.config import settings
  6. def _sentinel_kwargs() -> dict:
  7. kwargs = {}
  8. if settings.REDIS_SENTINEL_USERNAME:
  9. kwargs["username"] = settings.REDIS_SENTINEL_USERNAME
  10. if settings.REDIS_SENTINEL_PASSWORD:
  11. kwargs["password"] = settings.REDIS_SENTINEL_PASSWORD
  12. return kwargs
  13. def get_sentinel_client() -> Sentinel:
  14. return Sentinel(
  15. settings.REDIS_SENTINEL_NODES,
  16. socket_timeout=0.5,
  17. sentinel_kwargs=_sentinel_kwargs(),
  18. )
  19. def get_async_sentinel_client() -> AsyncSentinel:
  20. return AsyncSentinel(
  21. settings.REDIS_SENTINEL_NODES,
  22. socket_timeout=0.5,
  23. sentinel_kwargs=_sentinel_kwargs(),
  24. )
  25. def get_redis_master() -> Redis:
  26. return get_sentinel_client().master_for(
  27. service_name=settings.REDIS_MASTER_NAME,
  28. password=settings.REDIS_PASSWORD or None,
  29. db=settings.REDIS_DB,
  30. )
  31. def get_redis_slave() -> Redis:
  32. return get_sentinel_client().slave_for(
  33. service_name=settings.REDIS_MASTER_NAME,
  34. password=settings.REDIS_PASSWORD or None,
  35. db=settings.REDIS_DB,
  36. )
  37. def get_async_redis_master() -> AsyncRedis:
  38. return get_async_sentinel_client().master_for(
  39. service_name=settings.REDIS_MASTER_NAME,
  40. password=settings.REDIS_PASSWORD or None,
  41. db=settings.REDIS_DB,
  42. )
  43. def get_async_redis_slave() -> AsyncRedis:
  44. return get_async_sentinel_client().slave_for(
  45. service_name=settings.REDIS_MASTER_NAME,
  46. password=settings.REDIS_PASSWORD or None,
  47. db=settings.REDIS_DB,
  48. )