gpt4 book ai didi

python - 如何在 redis 中正确使用连接池?

转载 作者:IT老高 更新时间:2023-10-28 22:12:19 26 4
gpt4 key购买 nike

我不清楚连接池是如何工作的,以及如何正确使用它们。我希望有人可以详细说明。我在下面勾勒出我的用例:

settings.py:

import redis

def get_redis_connection():
return redis.StrictRedis(host='localhost', port=6379, db=0)

task1.py

import settings

connection = settings.get_redis_connection()

def do_something1():
return connection.hgetall(...)

task2.py

import settings

connection = settings.get_redis_connection()

def do_something1():
return connection.hgetall(...)

等等


基本上,我有一个返回 redis 连接的 setting.py 文件,以及几个不同的任务文件,它们获取 redis 连接,然后运行操作。所以每个任务文件都有自己的redis实例(估计很贵)。优化此过程的最佳方法是什么。这个例子可以使用连接池吗?有没有更有效的方法来设置这种模式?

对于我们的系统,我们有十几个遵循相同模式的任务文件,我注意到我们的请求速度变慢了。

谢谢

最佳答案

Redis-py 为您提供了一个连接池,您可以从中检索连接。连接池创建一组连接,您可以根据需要使用它们(完成后 - 连接将返回到连接池以供进一步重用)。尝试在不丢弃它们的情况下即时创建连接(即不使用池或未正确使用池)将使您与 redis 的连接太多(直到您达到连接限制)。

您可以选择在 init 方法中设置连接池并使连接池全局化(如果对全局不满意,您可以查看其他选项)。

redis_pool = None

def init():
global redis_pool
print("PID %d: initializing redis pool..." % os.getpid())
redis_pool = redis.ConnectionPool(host='10.0.0.1', port=6379, db=0)

然后您可以像这样从池中检索连接:

redis_conn = redis.Redis(connection_pool=redis_pool)

另外,我假设您正在使用hiredis 和redis-py,因为它应该在某些情况下提高性能。您是否还检查了使用现有设置打开到 redis 服务器的连接数,因为它很可能非常高?您可以使用 INFO 命令获取该信息:

redis-cli info

检查 Clients 部分,您将在其中看到“connected_clients”字段,该字段将告诉您在该时刻打开了多少个与 redis 服务器的连接。

关于python - 如何在 redis 中正确使用连接池?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31663288/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com