Flask-Redis-Sentinel provides support for connecting to Redis using Sentinel and also supports connecting to Redis without it.
- Supports Python 2.7 and 3.3+
- Licensed using Apache License 2.0
Install with pip:
pip install Flask-Redis-Sentinel
from flask_redis_sentinel import SentinelExtension
redis_sentinel = SentinelExtension()
redis_connection = redis_sentinel.default_connection
# Later when you create application
app = Flask(...)
redis_sentinel.init_app(app)
You can configure Redis connection parameters using REDIS_URL Flask configuration variable with redis+sentinel URL scheme:
redis+sentinel://localhost:26379[,otherhost:26379,...]/mymaster/0 redis+sentinel://localhost:26379[,otherhost:26379,...]/mymaster/0?socket_timeout=0.1 redis+sentinel://localhost:26379[,otherhost:26379,...]/mymaster/0?sentinel_socket_timeout=0.1 redis+sentinel://:sentinel-secret-password@localhost:26379[,otherhost:26379,...]/mymaster/0?sentinel_socket_timeout=0.1
The extension also supports URL schemes as supported by redis-py for connecting to an instance directly without Sentinel:
redis://[:password]@localhost:6379/0 rediss://[:password]@localhost:6379/0 unix://[:password]@/path/to/socket.sock?db=0
Flask-And-Redis style config variables are also supported for easier migration, but the extension will log a DeprecationWarning:
REDIS_HOST = 'localhost' REDIS_PORT = 6379 REDIS_DB = 0
In case both REDIS_URL and other variables are present, the URL is used.
from flask_redis_sentinel import SentinelExtension
redis_sentinel = SentinelExtension()
master1 = redis_sentinel.master_for('service1')
master2 = redis_sentinel.master_for('service2')
slave1 = redis_sentinel.slave_for('service1')
from flask_redis_sentinel import SentinelExtension
from flask import jsonify, Flask
app = Flask('test')
redis_sentinel = SentinelExtension(app=app)
@app.route('/')
def index():
slaves = redis_sentinel.sentinel.discover_slaves('service1')
return jsonify(slaves=slaves)
- Reupload to PyPI
- Connections are now thread-local to avoid race conditions after Redis master failover
- Removed support for REDIS_{HOST, PORT, DB} config variables
Moved URL handling code to a separate library, redis_sentinel_url
Backward-incompatible change:
# Old redis+sentinel://host:port/service?slave=true
Should now be written as:
# New redis+sentinel://host:port/service?client_type=slave
- Use config variables other than REDIS_{HOST, PORT, DB} even if REDIS_URL is used
- Minor refactoring
- Initial release