How to cache SQL Alchemy calls with Flask-Cache and Redis?
You don't need to create custom RedisCache
class. The docs is just teaching how you would create new backends that are not available in flask-cache
. But RedisCache
is already available in werkzeug >= 0.7
, which you might have already installed because it is one of the core dependencies of flask.
This is how I could run the flask-cache with redis backend:
import timefrom flask import Flaskfrom flask_cache import Cacheapp = Flask(__name__)cache = Cache(app, config={'CACHE_TYPE': 'redis'})@cache.memoize(timeout=60)def query_db(): time.sleep(5) return "Results from DB"@app.route('/')def index(): return query_db()app.run(debug=True)
The reason you're getting "ImportError: redis is not a valid FlaskCache backend"
is probably because you don't have redis
(python library) installed which you can simply install by:pip install redis
.
your redis args would look something like this:
cache = Cache(app, config={ 'CACHE_TYPE': 'redis', 'CACHE_KEY_PREFIX': 'fcache', 'CACHE_REDIS_HOST': 'localhost', 'CACHE_REDIS_PORT': '6379', 'CACHE_REDIS_URL': 'redis://localhost:6379' })
Putting the @cache.memoize over a method that grabs the info from the DB should work.