我正在使用Redis通过Redis-py客户端库存储两个数据库:0和1 。我想为每个数据库创建两个连接。目前,我正在这样做:
>>> 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实例将依次创建自己的连接池。通过将已创建的连接池实例传递给Redis类的connection_pool参数,可以覆盖此行为并使用现有的连接池。您可以选择执行此操作,以实现客户端分片或对连接的管理方式进行更精细的控制。
>>> pool = redis.ConnectionPool(host='localhost', port=6379, db=0) >>> r = redis.StrictRedis(connection_pool=pool)
您不能指定要与库一起使用的单个连接。每个Redis实例将具有其自己的连接池。调用execute_command()时,它将从池中弹出一个连接(或打开一个新的连接)并使用该连接。如果您只希望客户端一次最多建立一个连接,请将max_connections设置为1。