type
status
date
slug
summary
tags
category
icon
password
Last edited time
Dec 30, 2025 10:47 AM
问题描述:
线上superset常常报Connection Reset错误:
Redis使用的组件是Python的Flask-caching,对于这个问题采用重试策略。一般重试一次即可解决。
按照官方文档和Flask-caching文档设置如下配置后:
但是线上的报错仍然存在,怀疑是缓存策略没有生效的问题。但是debug的时候,参数都带过去,因此一开始搞错了排查的方向。
排查过程
仔细阅读源代码后,我发现flask-caching的缓存初始化是这么实现的:
flask-caching存在两种名为host的参数:
- 如果host是String格式,那么会好好的把**kwargs 带上去再创建一个Redis示例
- 如果host不是str,那么就直接拿host当Redis实例
解决过程
这个问题解决比较容易,只要不设置非string的host就行。
具体地,flask-caching的rediscache里的factory方法的实现中:
先从CACHE_REDIS_HOST,CACHE_REDIS_PORT,CACHE_REDIS_DB,CACHE_REDIS_PASSWORD尝试拿参数放到kwargs里去,如果这几个不设定的话,就从CACHE_REDIS_URL里拿,直接往host里面填充Redis实例。(不理解为啥要怎么做,会产生歧义,还会把其他参数丢掉。)
解决方法很简单: 不设置CACHE_REDIS_URL,直接设置CACHE_REDIS_HOST,CACHE_REDIS_PORT,CACHE_REDIS_DB,CACHE_REDIS_PASSWORD这几个参数即可。
这样子设置后打印:
就可以拿到正确结果了:
- 作者:很久不是自己
- 链接:https://weibo.com/article/superset-cache-bug
- 声明:本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。
相关文章