在 Redis Python 中创建和管理多个连接

2023-12-27

我正在使用 Redis 存储两个数据库:0 和 1 通过Redis-py https://github.com/andymccurdy/redis-py客户端库。我想为每个数据库创建两个连接。目前,我正在这样做:

>>> connection0 = redis.Connection(host = 'localhost', port = 6379, db = 0)
>>> connection1 = redis.Connection(host = 'localhost', port = 6379, db = 1)
>>> connection0.connect()

但是,我似乎没有找到从连接创建 Redis 对象的方法。

>>> store0 = redis.Redis(connection0)
>>> store0.info()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/Library/Frameworks/Python.framework/Versions/7.0/lib/python2.7/site-packages/redis-2.4.11-py2.7.egg/redis/client.py", line 341, in info
    return self.execute_command('INFO')
  File "/Library/Frameworks/Python.framework/Versions/7.0/lib/python2.7/site-packages/redis-2.4.11-py2.7.egg/redis/client.py", line 278, in execute_command
    connection.send_command(*args)
  File "/Library/Frameworks/Python.framework/Versions/7.0/lib/python2.7/site-packages/redis-2.4.11-py2.7.egg/redis/connection.py", line 258, in send_command
    self.send_packed_command(self.pack_command(*args))
  File "/Library/Frameworks/Python.framework/Versions/7.0/lib/python2.7/site-packages/redis-2.4.11-py2.7.egg/redis/connection.py", line 241, in send_packed_command
    self.connect()
  File "/Library/Frameworks/Python.framework/Versions/7.0/lib/python2.7/site-packages/redis-2.4.11-py2.7.egg/redis/connection.py", line 187, in connect
    sock = self._connect()
  File "/Library/Frameworks/Python.framework/Versions/7.0/lib/python2.7/site-packages/redis-2.4.11-py2.7.egg/redis/connection.py", line 198, in _connect
    sock.connect((self.host, self.port))
  File "/Library/Frameworks/Python.framework/Versions/7.0/lib/python2.7/socket.py", line 224, in meth
    return getattr(self._sock,name)(*args)
TypeError: coercing to Unicode: need string or buffer, Connection found

我在这里犯了菜鸟错误吗?


你真的不应该建立这样的联系。让我引用一下redis-py文档。

redis-py 在幕后使用连接池来管理 到 Redis 服务器的连接。默认情况下,您的每个 Redis 实例 create 将依次创建自己的连接池。您可以覆盖 这种行为并通过传递一个现有的连接池 已经创建连接池实例到connection_pool Redis 类的参数。您可以选择这样做,以便 实施客户端分片或对如何进行更细粒度的控制 连接受到管理。

>>> pool = redis.ConnectionPool(host='localhost', port=6379, db=0)
>>> r = redis.StrictRedis(connection_pool=pool)

您无法指定与库一起使用的单个连接。每个Redis实例都有自己的连接池。当调用execute_command()时,它将从池中弹出一个连接(或打开一个新连接)并使用该连接。如果您只希望客户端一次最多有一个连接,请将 max_connections 设置为 1。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 Redis Python 中创建和管理多个连接 的相关文章

随机推荐