【问题标题】:Does initializing many redis-py connections slow down server?初始化许多 redis-py 连接会减慢服务器速度吗?
【发布时间】:2021-05-19 17:21:19
【问题描述】:

假设在我的 python 服务器上,我打开了 10 个不同的 redis 连接,如下所示:

import redis

conn1 = redis.Redis(host=aaaa)
conn2 = redis.Redis(host=bbbb)
conn3 = redis.Redis(host=cccc)
...
conn10 = redis.Redis(host=jjjj)

redis-py 是如何在后台运行的,我的服务器是否会因每个额外的 redis.Redis() 调用而变慢?

【问题讨论】:

  • 是的,我不确定是在每次使用后关闭我的连接还是保持它们打开——如果它们共享同一个连接池,那么保持它们打开是有意义的。

标签: python redis redis-py


【解决方案1】:

redis-py 管理与ConnectionPool 的连接,它不会预先填充连接池。仅创建一个连接需要发送一个命令。

遵循源代码可能足以帮助理解该过程。如果您想深入了解,请阅读redis-py 的源代码。

class Redis:
    def set(self, name, value,
            ex=None, px=None, nx=False, xx=False, keepttl=False, get=False):
            ...

            return self.execute_command('SET', *pieces, **options)

    def execute_command(self, *args, **options):
        ...
        conn = self.connection or pool.get_connection(command_name, **options)
        try:
            conn.send_command(*args)
            return self.parse_response(conn, command_name, **options)
            ...

ConnectionPool.get_connection() 是 conn 创建的地方。其实这是底层 正在创建套接字。

class ConnectionPool:
    def get_connection(self, command_name, *keys, **options):
            ...
            try:
            # ensure this connection is connected to Redis
            connection.connect()
            ...

class Connection:
    ...
    def _connect(self):
        "Create a TCP socket connection"
        # we want to mimic what socket.create_connection does to support
        # ipv4/ipv6, but we want to set options prior to calling
        # socket.connect()
        err = None
        for res in socket.getaddrinfo(self.host, self.port, self.socket_type,
                                      socket.SOCK_STREAM):
            family, socktype, proto, canonname, socket_address = res
            sock = None
            try:
                sock = socket.socket(family, socktype, proto)
                ...

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-08-02
    • 2013-12-30
    • 1970-01-01
    • 2023-04-07
    • 2015-12-09
    • 1970-01-01
    • 1970-01-01
    • 2012-08-17
    相关资源
    最近更新 更多