redis_client.py 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  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_PASSWORD:
  9. kwargs["password"] = settings.REDIS_PASSWORD
  10. return kwargs
  11. def get_sentinel_client() -> Sentinel:
  12. return Sentinel(
  13. settings.REDIS_SENTINEL_NODES,
  14. socket_timeout=0.5,
  15. sentinel_kwargs=_sentinel_kwargs(),
  16. )
  17. def get_async_sentinel_client() -> AsyncSentinel:
  18. return AsyncSentinel(
  19. settings.REDIS_SENTINEL_NODES,
  20. socket_timeout=0.5,
  21. sentinel_kwargs=_sentinel_kwargs(),
  22. )
  23. def get_redis_master() -> Redis:
  24. return get_sentinel_client().master_for(
  25. service_name=settings.REDIS_MASTER_NAME,
  26. password=settings.REDIS_PASSWORD or None,
  27. db=settings.REDIS_DB,
  28. )
  29. def get_redis_slave() -> Redis:
  30. return get_sentinel_client().slave_for(
  31. service_name=settings.REDIS_MASTER_NAME,
  32. password=settings.REDIS_PASSWORD or None,
  33. db=settings.REDIS_DB,
  34. )
  35. def get_async_redis_master() -> AsyncRedis:
  36. return get_async_sentinel_client().master_for(
  37. service_name=settings.REDIS_MASTER_NAME,
  38. password=settings.REDIS_PASSWORD or None,
  39. db=settings.REDIS_DB,
  40. )
  41. def get_async_redis_slave() -> AsyncRedis:
  42. return get_async_sentinel_client().slave_for(
  43. service_name=settings.REDIS_MASTER_NAME,
  44. password=settings.REDIS_PASSWORD or None,
  45. db=settings.REDIS_DB,
  46. )