redis_client.py 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  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. """sentinel 本身无密码,此处不传 password"""
  8. return {}
  9. def get_sentinel_client() -> Sentinel:
  10. return Sentinel(
  11. settings.REDIS_SENTINEL_NODES,
  12. socket_timeout=0.5,
  13. sentinel_kwargs=_sentinel_kwargs(),
  14. )
  15. def get_async_sentinel_client() -> AsyncSentinel:
  16. return AsyncSentinel(
  17. settings.REDIS_SENTINEL_NODES,
  18. socket_timeout=0.5,
  19. sentinel_kwargs=_sentinel_kwargs(),
  20. )
  21. def get_redis_master() -> Redis:
  22. return get_sentinel_client().master_for(
  23. service_name=settings.REDIS_MASTER_NAME,
  24. password=settings.REDIS_PASSWORD or None,
  25. db=settings.REDIS_DB,
  26. )
  27. def get_redis_slave() -> Redis:
  28. return get_sentinel_client().slave_for(
  29. service_name=settings.REDIS_MASTER_NAME,
  30. password=settings.REDIS_PASSWORD or None,
  31. db=settings.REDIS_DB,
  32. )
  33. def get_async_redis_master() -> AsyncRedis:
  34. return get_async_sentinel_client().master_for(
  35. service_name=settings.REDIS_MASTER_NAME,
  36. password=settings.REDIS_PASSWORD or None,
  37. db=settings.REDIS_DB,
  38. )
  39. def get_async_redis_slave() -> AsyncRedis:
  40. return get_async_sentinel_client().slave_for(
  41. service_name=settings.REDIS_MASTER_NAME,
  42. password=settings.REDIS_PASSWORD or None,
  43. db=settings.REDIS_DB,
  44. )