Flask-Caching特定路由缓存清除:请求出错/变量为空时的实现方法
解决Flask-Caching错误场景下清除特定路由缓存的问题
要实现错误时清除对应缓存,核心是找到当前请求对应的缓存键并主动删除,具体修改如下:
你需要在错误分支里生成当前请求的缓存键,然后调用cache.delete()删除它。Flask-Caching的_get_cache_key方法可以生成和@cache.cached一致的缓存键,参数要和装饰器配置完全匹配(比如这里的query_string=True)。
修改后的完整代码:
@nsaudio.route('/repeat/<string:text>/<string:chatid>/<string:voice>') class AudioRepeatClass(Resource): @cache.cached(timeout=120, query_string=True) def get(self, text: str, chatid: str, voice: str): try: tts_out = utils.get_tts(text, voice=voice, timeout=120) if tts_out is not None: return send_file(tts_out, attachment_filename='audio.wav', mimetype='audio/x-wav') else: # 生成当前请求的缓存键并删除 cache_key = cache._get_cache_key(request=request, view_func=self.get, query_string=True) cache.delete(cache_key) resp = make_response("TTS Generation Error!", 500) return resp except Exception as e: # 异常时同样删除缓存 cache_key = cache._get_cache_key(request=request, view_func=self.get, query_string=True) cache.delete(cache_key) return make_response(str(e), 500)
关键说明:
cache._get_cache_key:这是Flask-Caching内部生成缓存键的方法,参数必须和@cache.cached装饰器的配置保持一致,才能匹配到缓存中存储的对应键值。- 手动删除的必要性:
@cache.cached默认会缓存所有响应(包括500错误),如果不主动删除,下次请求会直接返回缓存的错误结果,不会重新执行utils.get_tts。 - 版本适配:如果你的Flask-Caching版本有更新,
_get_cache_key的参数可能略有调整,可根据实际版本调整参数(比如部分版本需要传入视图的动态参数args)。
内容的提问来源于stack exchange,提问作者blastbeng
相关产品推荐
相关产品推荐

