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 time
from flask import Flask
from flask_cache import Cache
app = 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.