redis:达到最大客户端数

sji*_*han 7 python redis

我有这个 redis 缓存,其中的值每天设置大约 100 次。完美运行几天后,我收到连接错误“已达到最大客户端数”。重新启动服务器后,它现在工作正常,但是我想在将来避免这个问题。

在我看来,一旦我创建了一个客户端对象,它就会留在连接池中并且永远不会被杀死或删除。

这是我的代码

r = redis.StrictRedis(host= host, port=6379, db=0)
r.set(key_name, data)
Run Code Online (Sandbox Code Playgroud)

这是在迭代中。而且,我在 python 中使用 redis。

Jor*_*dan 9

如果您不关闭它,客户端连接将永远保持打开状态。

https://redis.io/topics/clients

客户端超时默认情况下,如果客户端空闲数秒,Redis 的最新版本不会关闭与客户端的连接:连接将永远保持打开状态。

但是如果你不喜欢这种行为,你可以配置一个超时,这样如果客户端空闲时间超过指定的秒数,客户端连接将被关闭。

您可以通过 redis.conf 或简单地使用 CONFIG SET timeout 配置此限制。


ana*_*thi 6

我认为您的 redis 连接正在实例化每个请求,导致它达到最大连接限制,您应该将 redis 实例保留在全局中,这将共享相同的 redis 实例,这不应再导致太多连接。redis 实例将有自己的连接池,您可以通过将 max_connections 参数设置为 redis.ConnectionPool 来限制您的连接数。如果设置了 max_connections,则当达到池的限制时,此对象会引发 redis.ConnectionError。

POOL = redis.ConnectionPool(host= host, port=6379, db=0)
r = redis.StrictRedis(connection_pool=POOL)
Run Code Online (Sandbox Code Playgroud)