簡體   English   中英

如果 Flask 視圖中出現錯誤,如何使 redis 緩存對象失效或刪除

[英]How to invalidate or delete a redis cache object if an error in Flask view

我在使用 Flask 緩存模塊時遇到了一個問題,如果出現運行時錯誤,我不希望緩存視圖。

誰能建議如何做到這一點?

這是我想要實現的目標。

from flask import Flask    
from flask.ext.cache import Cache

app = Flask(__name__)
mycache = Cache()
mycache.init_app(app)

@mycache.cached()
@app.route('/myview')
def process_view():
    try:
        return get_something()
    except:
        return print_error_and_no_cache_this_view()

如果我有錯誤,關於如何停止緩存此視圖的任何想法?

您可以在after_this_request處理程序中調用cache.delete_memoized

# @cached needs to be invoked before @route
# because @route registers the handler with Flask
# and @cached returns a different function.
# If you @route first and then @cache Flask will
# always execute the *uncached* version.

@app.route('/myview')
@mycache.cached()
def process_view():
    try:
        return get_something()
    except:

        @app.after_this_request
        def clear_cache(response):
            mycache.delete_memoized('process_view')
            return response

        return print_error_and_no_cache_this_view() 

或者,查看 Flask-Cache 的代碼,它似乎不處理 view 拋出的錯誤 因此,您可以簡單地自己引發錯誤並使用單獨的處理程序處理異常:

@app.route('/myview')
@mycache.cached()
def process_view():
    try:
        return get_something()
    except Exception as e:
        raise ProcessViewIssue(e)

@app.errorhandler(ProcessViewIssue)
def handle_process_view_error(e):
    return print_error()    

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM