Simple as dead support of Redis database for Flask apps.
Note
I named this Flask-And-Redis
, cause Flask-Redis
name already
taken, but that library didn't
match my needs.
$ pip install Flask-And-Redis
Flask-And-Redis
is licensed under the BSD License.
Flask-And-Redis
understands all keyword arguments which should be passed
to redis.StrictRedis
or redis.Redis
classes init method. In easiest way
all you need is putting
REDIS_HOST
REDIS_PORT
REDIS_DB
to your settings module. Other available settings are:
REDIS_PASSWORD
REDIS_SOCKET_TIMEOUT
REDIS_CONNECTION_POOL
REDIS_CHARSET
REDIS_ERRORS
REDIS_DECODE_RESPONSES
REDIS_UNIX_SOCKET_PATH
Later these values would initialize redis connection and all public methods of
connection's instance would be copied to flask_redis.Redis
. Also connection
would be stored in flask_redis.Redis.connection
attribute and in
app.extensions['redis']
dict.
But that's not all, extension also have two more configuration options and ability to connect to multiple redis instances.
.. versionadded:: 0.5
Before 0.5 version only redis.Redis
connection used. But as times change
and redis.StrictRedis
class grab default status we start to using it as
our default connection class.
To change this behavior or even use your own class for redis connection you
should pass a class itself or its path to REDIS_CLASS
setting as:
from redis import Redis REDIS_CLASS = Redis
or:
REDIS_CLASS = 'redis.Redis' REDIS_CLASS = 'path.to.module.Redis'
.. versionadded:: 0.2
Sometimes, your redis settings stored as redis://...
url (like in Heroku
or DotCloud services), so you could to provide just REDIS_URL
setting
and Flask-And-Redis
auto parsed that value and will configure then valid
redis connection.
In case, when REDIS_URL
provided all appropriate configurations, and other
keys are overwritten using their values at the present URI.
.. versionadded:: 0.4
Config prefix allows you to determine the set of configuration variables used
to configure redis.Redis
connection. By default, config prefix REDIS
would be used.
But when you want to initialize multiple redis connections, you could do this like:
from flask import flask from flask.ext.redis import Redis app = Flask(__app__) app.config['REDIS_HOST'] = 'localhost' app.config['REDIS_PORT'] = 6379 app.config['REDIS_DB'] = 0 redis1 = Redis(app) app.config['REDIS2_URL'] = 'redis://localhost:6379/1' redis2 = Redis(app, 'REDIS2')
In regular case all you need is importing flask_redis.Redis
instance and
initialize it with app
instance, like:
from flask import Flask from flask.ext.redis import Redis app = Flask(__name__) redis = Redis(app)
.. versionadded:: 0.3
But if you use application factories you could use init_app
method,
redis = Redis() # The later on app = create_app('config.cfg') redis.init_app(app)
Also later you can get redis
connection from app.extensions['redis']
dict, where key
is config prefix and value
is worked redis connection
instance.
If you found some bug in Flask-And-Redis
library, please, add new issue to
the project's GitHub issues.
- Use
redis.StrictRedis
class to connection by default. - Understands unix socket path in
REDIS_HOST
. - Updates to README.
- Big refactor of
Redis
instance. Do not inheritredis.Redis
class, store active redis connection inRedis.connection
attribute andapp.extensions['redis']
dict. - Add support of
config_prefix
keyword argument forRedis
orinit_app
methods. - Support multiple redis connections in test application.
- Fix problem while parsing
REDIS_URL
value, strip unnecessary slashes from database path (likeredis://localhost:6379/12/
).
- Checked compability with
redis-py
version 2.6.0. - Added
redis
as install requirement insetup.py
.
- Move from
flask_redis
package to python module. - Little improvements for storing
_flask_app
attribute toRedis
instance.
- Implement
init_app
method.
- Convert
REDIS_PORT
to anint
instance.
- Added support of
REDIS_URL
setting. By default,Redis
will try to guess host, port, user, password and db settings from that value.
- Initial release.