我有一个Flask应用程序,从Web表单中获取参数,使用SQLAlchemy查询数据库,并返回由Jinja生成的HTML,显示结果表格。我想缓存对数据库的调用。我研究了Redis (将Redis用作Postgres的LRU缓存),这使我找到了http://pythonhosted.org/Flask-Cache/。
现在我正在尝试使用Redis + Flask-Cache来缓存对数据库的调用。根据Flask-Cache文档,似乎我需要设置一个自定义的Redis缓存。
class RedisCache(BaseCache):
def __init__(self, servers, default_timeout=500):
pass
def redis(app, config, args, kwargs):
args.append(app.config['REDIS_SERVERS'])
return RedisCache(*args, **kwargs)
从那里开始,我需要做类似于以下的事情:
# not sure what to put for args or kwargs
cache = redis(app, config={'CACHE_TYPE': 'redis'})
app = Flask(__name__)
cache.init_app(app)
我有两个问题:
我应该在
args
和kwargs
中填什么?这些是什么意思?如何使用 Flask-Cache 设置 Redis 缓存?一旦缓存设置好了,看起来我会想要以某种方式“memoize”调用数据库,以便如果方法获得相同的查询,它就会具有输出缓存。我该如何做到这一点?我的最佳猜测是将 SQL Alchemy 调用封装在一个方法中,然后给该方法提供 memoize 装饰器?这样,如果两个相同的查询被传递给该方法,Flask-Cache 会识别这一点并返回适当的响应。我猜它会看起来像这样:
@cache.memoize(timeout=50)
def queryDB(q):
return q.all()
这似乎是 Redis + Flask + Flask-Cache + SQL Alchemy 的常见用法,但我无法找到一个完整的示例来遵循。如果有人能够发布一个,那将非常有帮助 - 对于我和其他人来说都是如此。