diff --git a/smile_redis_session_store/README.rst b/smile_redis_session_store/README.rst index ac79174eb..67c771042 100644 --- a/smile_redis_session_store/README.rst +++ b/smile_redis_session_store/README.rst @@ -34,6 +34,8 @@ Available options * `redis_port` (default: 6379): Redis port * `redis_dbindex` (default: 1): Redis database index * `redis_pass` (default: None): Redis password +* `sentinel_pool`: list of sentinel nodes, a pair like `(hostname, port)` +* `master_name` (default: mymaster): Redis master name Bug Tracker diff --git a/smile_redis_session_store/redis_session_store.py b/smile_redis_session_store/redis_session_store.py index 8a985da49..a21e5e312 100644 --- a/smile_redis_session_store/redis_session_store.py +++ b/smile_redis_session_store/redis_session_store.py @@ -37,6 +37,7 @@ def is_redis_session_store_activated(): try: import redis + from redis.sentinel import Sentinel except ImportError: if is_redis_session_store_activated(): raise ImportError('Please install package python-redis: apt-get install python-redis') @@ -48,10 +49,22 @@ def __init__(self, *args, **kwargs): super(RedisSessionStore, self).__init__(*args, **kwargs) self.expire = kwargs.get('expire', SESSION_TIMEOUT) self.key_prefix = kwargs.get('key_prefix', '') - self.redis = redis.Redis(host=tools.config.get('redis_host', 'localhost'), - port=int(tools.config.get('redis_port', 6379)), - db=int(tools.config.get('redis_dbindex', 1)), - password=tools.config.get('redis_pass', None)) + # sentinel pool mode + if tools.config.get('sentinel_pool', None): + sentinels = Sentinel(eval(tools.config.get('sentinel_pool')), socket_timeout=0.1) + self.redis = sentinels.master_for( + tools.config.get('master_name', 'mymaster'), + redis_class=redis.Redis, + socket_timeout=0.1, + db=int(tools.config.get('redis_dbindex', 1)), + password=tools.config.get('redis_pass', None)) + else: + self.redis = redis.Redis( + host=tools.config.get('redis_host', 'localhost'), + port=int(tools.config.get('redis_port', 6379)), + db=int(tools.config.get('redis_dbindex', 1)), + password=tools.config.get('redis_pass', None)) + self._is_redis_server_running() def save(self, session):