我有一个Flask应用程序,它从web表单获取参数,使用SQL Alchemy查询数据库,并返回Jinja生成的HTML,显示一个包含结果的表。我想缓存对数据库的调用。我查看了Redis(Using redis as an LRU cache for postgres),它引导我找到了http://pythonhosted.org/Flask-Cache/。
现在我尝试使用Redis+Flask缓存来缓存对DB的调用。基于Flask缓存文档,我似乎需要设置一个自定义的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
放些什么?这是什么意思?如何使用烧瓶缓存设置Redis缓存?
一旦设置了缓存,我似乎希望以某种方式“memoize”调用数据库,以便如果该方法获得相同的查询,它将缓存输出。我该怎么做?我最好的猜测是将调用SQL Alchemy包装在一个方法中,然后可以给memoize decorator?这样,如果将两个相同的查询传递给该方法,Flask缓存将识别此查询并返回相应的响应。我猜应该是这样的:
@cache.memoize(timeout=50)
def queryDB(q):
return q.all()
这似乎是Redis+Flask+Flask Cache+SQL炼金术的一个相当常见的用法,但是我无法找到一个完整的示例来遵循。如果有人能发布一个,那将是非常有帮助的——但对我和其他人来说。
您不需要创建自定义的
RedisCache
类。文档只是教您如何创建在flask-cache
中不可用的新后端。但是RedisCache
已经在werkzeug >= 0.7
中可用,您可能已经安装了它,因为它是烧瓶的核心依赖项之一。这就是我如何使用redis后端运行flask缓存的方法:
获得
"ImportError: redis is not a valid FlaskCache backend"
的原因可能是您没有安装redis
(python库),您可以通过以下方式安装:pip install redis
。你的redis args看起来像这样:
将@cache.memoize放在从数据库获取信息的方法上应该可以工作。
相关问题 更多 >
编程相关推荐