我正在使用aredis处理连接池。以下是我如何在主要功能中实例化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如何重用这些连接?
答案 0 :(得分:0)
尽管在无法访问代码的情况下调试该问题有些困难,但似乎错误的是您正在使用的集群连接初始化。
我会猜测说您的“主要”方法使用的次数超过96次,这会导致您得到异常。
尝试为整个应用程序仅建立一次集群连接,然后将其与const isArraySorted = array =>
array
.slice(0) // clone array
.sort((a, b) => a - b) // sort it
.every((el, i) => el === array[i]) // compare with initial value)
一起传递:
app
答案 1 :(得分:0)
由于redis-cluster允许为每个集群建立10000-32个开放连接。现在,如果您有10台服务器,则每台服务器最多只能建立1000个打开的连接。因此,对于您的情况,问题可能是,对于每台服务器,如果您有50个工作程序,则Redis初始化中的最大连接数应不超过20。请尝试减少每个工作程序的最大连接数,因为这对我来说是完美的
Eg:
StrictRedisCluster(startup_nodes=host, decode_responses=True, loop=loop, max_connections=35)
因此,您需要减少每个工作人员的max_connections限制。
答案 2 :(得分:0)
使用连接池,增加连接数 代码
import redis
redis_pool = redis.ConnectionPool(host='127.0.0.1', port=6379, db=0)
conn = redis.Redis(connection_pool=redis_pool, max_connections=2 * 31)