python - RedisClusterException:使用连接池时redis中的连接太多
问题描述
我正在使用 aredis 来处理连接池。以下是我如何在 main 函数中实例化 redis 连接 -
redis_conn = await asyncio.ensure_future(get_redis_conn(redis_host, loop))
以下是协程定义 -
async def get_redis_conn(host, loop):
return StrictRedisCluster(startup_nodes=host, decode_responses=True, loop=loop, max_connections=96)
我正在使用 sanic 来运行 Web 服务器。这就是我实例化的方式 -
app.run(host='0.0.0.0', port=port, after_start=after_start, workers=32)
我的实现在某种程度上是错误的吗?我不知道redis如何重用这些连接?
解决方案
由于 redis-cluster 允许为每个集群建立 10000 - 32 个打开的连接。现在,如果您有 10 台服务器,则每台服务器不能建立超过 1000 个打开的连接。因此,对于您的情况,问题可能是,对于每台服务器,如果您有 50 个工作人员,那么 redis 初始化中的最大连接数不应超过 20。尝试减少每个工作人员的最大连接数,因为它对我来说非常完美.
Eg:
StrictRedisCluster(startup_nodes=host, decode_responses=True, loop=loop, max_connections=35)
所以你需要减少每个工人的这个 max_connections 限制。
推荐阅读
- performance - 简单的 Flutter 列表视图断断续续的滚动
- javascript - 为什么 setTimeout 有 0 秒最后完成
- javascript - 反应组件不呈现新列表
- javascript - 使用 React 钩子时的 TypeError-useReducer
- plot - 为什么我的 gnuplot 结果(来自 csv 的 png)不是我所期望的?
- javascript - 来自移动浏览器的角度上传图像不起作用
- python - 带有 docker 的烧瓶在除 root 之外的所有路由上返回 404
- javascript - JavaScript 类型编写器效果从 onclick 更改为 onload
- javascript - 如何在文本区域中显示来自服务器的数据
- javascript - 在Vue Js的表格中创建奇数和偶数单元格的问题