gpt4 book ai didi

python - 如何使用 Flask-Cache 和 Redis 缓存 SQL Alchemy 调用?

转载 作者:IT老高 更新时间:2023-10-28 20:36:57 26 4
gpt4 key购买 nike

我有一个 Flask 应用程序,它从 Web 表单中获取参数,使用 SQL Alchemy 查询数据库并返回由 Jinja 生成的 HTML,显示带有结果的表格。我想缓存对数据库的调用。我查看了 Redis (Using redis as an LRU cache for postgres),这使我找到了 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)

我有两个问题:

  1. argskwargs 应该放什么?这些是什么意思?如何使用 Flask-Cache 设置 Redis 缓存?

  2. 一旦设置了缓存,我似乎想以某种方式“memoize”调用数据库,这样如果方法获得相同的查询,它就会缓存输出。我该怎么做呢?我最好的猜测是将调用 SQL Alchemy 包装在一个方法中,然后可以给它 memoize 装饰器?这样,如果将两个相同的查询传递给该方法,Flask-Cache 将识别出这一点并返回适当的响应。我猜它会是这样的:

    @cache.memoize(timeout=50)
    def queryDB(q):
    return q.all()

这似乎是 Redis + Flask + Flask-Cache + SQL Alchemy 的相当常见的用法,但我无法找到一个完整的示例来遵循。如果有人可以发布一个,那将非常有帮助 - 但对我和其他人来说。

最佳答案

您不需要创建自定义 RedisCache 类。该文档只是在教您如何创建 flask-cache 中不可用的新后端。但是 RedisCache 已经在 werkzeug >= 0.7 中可用,您可能已经安装了它,因为它是 flask 的核心依赖项之一。

这就是我可以使用 redis 后端运行 flask 缓存的方式:

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)

您收到 "ImportError: redis is not a valid FlaskCache backend" 的原因可能是因为您没有安装 redis(python 库)可以简单地安装:
pip install redis.

关于python - 如何使用 Flask-Cache 和 Redis 缓存 SQL Alchemy 调用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24589123/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com