即使使用池,Redis 连接也会持续增加

问题描述 投票:0回答:2

我有一个 Flask 应用程序,它使用 Waitress 作为服务器,并使用 Celery+RabbitMQ(作为代理)+ Redis(作为后端)来执行任务。

我注意到,即使为 Redis 设置了池,我的 Redis 连接数量仍在不断增加。清除它们的唯一方法是终止应用程序(或者在我的 Heroku 例子中,重新启动测功机)。

这是当前代码的示例:

CLOUDAMQP_URL = os.environ.get("CLOUDAMQP_URL") or os.environ.get("RABBITMQ_URL")
HEROKU = os.environ['HEROKU']

if HEROKU == "production":
    url = urlparse(os.environ.get('REDISCLOUD_URL'))
    backend_url = f"redis://{url.username}:{url.password}@{url.hostname}:{url.port}"
else:
    backend_url = "redis://localhost:6379/0"

redis_client = redis.Redis.from_url(backend_url)
broker_url = CLOUDAMQP_URL


app = Celery('chatbot_tasks', broker=broker_url, backend=backend_url)

app.conf.task_serializer = 'json'
app.conf.result_serializer = 'json'
app.conf.broker_pool_limit = 0

什么可能导致此问题?

我尝试建立一个这样的池:

backend_url = os.environ['REDIS_URL']
pool = ConnectionPool.from_url(backend_url)

但没有修复...

python flask redis rabbitmq celery
2个回答
0
投票

由于我不知道是什么原因导致连接增加,设置redis服务器超时可能是一个短期解决方案。配置完成后,所有客户端连接将在配置的空闲时间后关闭。 使用一些 Redis 客户端运行一次:

CONFIG SET timeout <time in seconds>

Redis 客户端处理


0
投票

Redis.from_url() 作为 singleton 有一个错误,请参阅问题:https://github.com/redis/redis-py/issues/2638

© www.soinside.com 2019 - 2024. All rights reserved.