首页 > 解决方案 > 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如何重用这些连接?

标签: pythonasynchronousredissanic

解决方案


由于 redis-cluster 允许为每个集群建立 10000 - 32 个打开的连接。现在,如果您有 10 台服务器,则每台服务器不能建立超过 1000 个打开的连接。因此,对于您的情况,问题可能是,对于每台服务器,如果您有 50 个工作人员,那么 redis 初始化中的最大连接数不应超过 20。尝试减少每个工作人员的最大连接数,因为它对我来说非常完美.

Eg:
StrictRedisCluster(startup_nodes=host, decode_responses=True, loop=loop, max_connections=35)

所以你需要减少每个工人的这个 max_connections 限制。


推荐阅读