redis_client.py 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  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. return settings.REDIS_SENTINEL_KWARGS
  8. def get_sentinel_client() -> Sentinel:
  9. return Sentinel(
  10. settings.REDIS_SENTINEL_NODES,
  11. socket_timeout=0.5,
  12. sentinel_kwargs=_sentinel_kwargs(),
  13. )
  14. def get_async_sentinel_client() -> AsyncSentinel:
  15. return AsyncSentinel(
  16. settings.REDIS_SENTINEL_NODES,
  17. socket_timeout=0.5,
  18. sentinel_kwargs=_sentinel_kwargs(),
  19. )
  20. def get_redis_master() -> Redis:
  21. return get_sentinel_client().master_for(
  22. service_name=settings.REDIS_MASTER_NAME,
  23. password=settings.REDIS_PASSWORD or None,
  24. db=settings.REDIS_DB,
  25. )
  26. def get_redis_slave() -> Redis:
  27. return get_sentinel_client().slave_for(
  28. service_name=settings.REDIS_MASTER_NAME,
  29. password=settings.REDIS_PASSWORD or None,
  30. db=settings.REDIS_DB,
  31. )
  32. def get_async_redis_master() -> AsyncRedis:
  33. return get_async_sentinel_client().master_for(
  34. service_name=settings.REDIS_MASTER_NAME,
  35. password=settings.REDIS_PASSWORD or None,
  36. db=settings.REDIS_DB,
  37. )
  38. def get_async_redis_slave() -> AsyncRedis:
  39. return get_async_sentinel_client().slave_for(
  40. service_name=settings.REDIS_MASTER_NAME,
  41. password=settings.REDIS_PASSWORD or None,
  42. db=settings.REDIS_DB,
  43. )
  44. def get_redis() -> Redis:
  45. # 默认返回主节点客户端,统一写入入口
  46. return get_redis_master()
  47. def get_async_redis() -> AsyncRedis:
  48. # 默认返回主节点客户端,统一写入入口
  49. return get_async_redis_master()