У меня есть приложение Flask, которое получает параметры из веб-формы, запрашивает базу данных с помощью SQL Alchemy и возвращает сгенерированный Jinja HTML-код, показывающий таблицу с результатами. Я хочу кешировать звонки в БД. Я посмотрел на Redis (используя redis как LRU-кеш для 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)
У меня есть два вопроса:
-
Что я положу для
args
иkwargs
? Что это значит? Как настроить кэш Redis с помощью Flask-Cache? -
После настройки кэша кажется, что я бы хотел как-то " запоминать " вызовы БД, чтобы, если метод получал тот же запрос, он кэшировал выходные данные. Как мне это сделать? Моим лучшим предположением было бы заключить вызов SQL Alchemy в метод, который затем можно было бы передать декоратору memoize? Таким образом, если в метод передаются два идентичных запроса, Flask-Cache распознает это и вернется к соответствующему ответу. Я предполагаю, что это будет выглядеть так:
@cache.memoize(timeout=50) def queryDB(q): return q.all()
Это похоже на довольно распространенное использование Redis + Flask + Flask-Cache + SQL Alchemy, но я не могу найти полный пример для подражания. Если бы кто-то мог опубликовать один, это было бы очень полезно - но для меня и для других в будущем.