2014-07-05 3 views
16

나는 웹 폼에서 매개 변수를 취하고 DB w/SQL 연금술을 쿼리하고 결과가있는 테이블을 보여주는 jinja 생성 템플릿을 반환하는 플라스크 응용 프로그램이 있습니다. DB에 호출을 캐시하고 싶습니다. 내가 redis보고, Using redis as an LRU cache for postgres - 나를 이끌어 http://pythonhosted.org/Flask-Cache/Flask-cache 및 redis로 SQL alchemy 호출을 캐시하는 방법은 무엇입니까?

지금 나는 redis + flask-cache를 사용하여 DB에 대한 호출을 캐싱하려고합니다. Flask-Cache 문서를 기반으로 사용자 지정 redis 캐시를 설정해야하는 것처럼 보입니다. 먼저

: 내가 인수 및 kwargs로 무엇 배치해야합니까

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) 

는 거기에서 나는 두 가지 질문이

cache = redis(app, config={'CACHE_TYPE': 'redis'}) //not sure what to put for args or kwards? 

app = Flask(__name__) 
cache.init_app(app) 

같은 것을 할 필요가? 이게 무슨 뜻입니까? 플라스크 캐시로 redis 캐시를 설정하려면 어떻게해야합니까?

둘째 : 일단 캐쉬가 설정 되었다면 어떻게 든 "memoize"을 호출하는 것처럼 보일 것입니다. 따라서 메서드가 동일한 쿼리를 가져 오면 캐싱 된 결과가 출력됩니다. 어떻게해야합니까? 필자의 가장 좋은 추측은 memoize 데코레이터를 사용할 수있는 메서드에서 SQL 연금술을 호출하는 것입니다. 두 개의 동일한 쿼리가 메서드에 전달되면 flask-cache는이를 인식하고 적절한 응답으로 돌아갑니다. 나는 그것이 같을 것이다 같은데요 :

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

이 레디 스 + 플라스크 + 플라스크 캐시 + SQL 연금술의 매우 일반적으로 사용되는 것 같아하지만 난 따라야 할 완전한 예를 찾을 수 없습니다입니다. 누군가가 게시물을 올릴 수 있다면, 그것은 도움이 될 것입니다.하지만 저와 다른 사람들은 줄을 서십시오.

+0

쿼리 개체를 인수로 전달하면 개체의 메모리 주소를 사용하여 memoize가 반환되는 문제가 발생했습니다. 래핑 클래스가 이것을 해결했습니다. 희망이 사람을 도울 수 있기를 바랍니다 ... – ezdazuzena

답변

28

맞춤형 RedisCache 클래스를 만들 필요가 없습니다. 문서는 단지 flask-cache에서 사용할 수없는 새로운 백엔드를 만드는 방법을 가르치는 것입니다. 그러나 RedisCache은 이미 werkzeug >= 0.7으로 제공되며, 플라스크의 핵심 종속성 중 하나이기 때문에 이미 설치했을 수 있습니다.

내가 레디 스 백엔드 플라스크 캐시를 실행할 수있는 방법입니다 : 설치 당신이 redis (파이썬 라이브러리)이 없기 때문에

import time 
from flask import Flask 
from flask.ext.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"을 얻고있는 이유는 아마도 어떤 당신은 간단하게 할 수 설치 :
pip install redis.

+0

제 경우에 'pip install redis' :) Riz와 같은 redis 연결을 구성해야한다는 것을 기억하십시오. –

+4

참고 : 'flask flask.ext.cache from Import cache'를 사용하여 플라스크 확장 가져 오기가 더 이상 사용되지 않습니다. 'from flask_cache import Cache'. –

11

당신의 레디 스의 인수는 다음과 같이 보일 것입니다 :

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' 
    }) 

작동해야 DB에서 정보를 잡는 방법을 통해 @의 cache.memoize 퍼팅.

+0

이 예제를 따르는 경우 "ImportError : redis가 유효한 FlaskCache 백엔드가 아닙니다." – bernie2436

+0

CACHE_TYPE을 'redis'로 변경하면 오류가 발생합니다. flask_cache : 캐시 백엔드 때문에 예외가 발생했을 수 있습니다. ..AttributeError : 'Flask'객체에 'mget'속성이 없습니다. – bernie2436

+2

redid python 라이브러리가 설치되어 있는지 확인하십시오. pip redis 설치 – Riz

관련 문제