You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 20:00:58