Решение, которое работало для меня, было найдено в django CacheHandler
В этом случае для построения подключения REDIS используется redis-sentinel-url .
settings.py
- Определения строк подключения Redis в
REDIS = {
"default": "redis:///",
"secondary": "redis+sentinel:///"
}
RedisPoolHandler
реализация класса похожа на django CacheHandler
from threading import local
import redis_sentinel_url
from django.conf import settings
from django.core.cache import InvalidCacheBackendError
class RedisClientHandler:
"""
A Redis Client Handler to manage access to Redis instances.
Ensure only one instance of each alias exists per thread.
"""
def __init__(self):
self._clients = local()
def __getitem__(self, alias):
try:
return self._redis_clients.caches[alias]
except AttributeError:
self._redis_clients.caches = {}
except KeyError:
pass
if alias not in settings.REDIS:
raise InvalidCacheBackendError(
"Could not find config for '%s' in settings.REDIS" % alias
)
value = settings.REDIS[alias]
sentinel, redis_pool = redis_sentinel_url.connect(value, client_options={"decode_responses": True})
self._redis_clients.caches[alias] = redis_pool
return redis_pool
def all(self):
return getattr(self._redis_clients, '_redis_clients', {}).values()
redis_clients = RedisPoolHandler()
Пример использования ниже:
from path.to.classfile import redis_clients
redis_client = redis_clients['default']