python - help - redis hkeys
Crear y administrar conexiones mĂșltiples en Redis Python (1)
Estoy usando Redis para almacenar dos bases de datos: 0 y 1 a través de la biblioteca del cliente Redis-py . Me gustaría crear dos conexiones para cada base de datos. Actualmente, estoy haciendo esto:
>>> connection0 = redis.Connection(host = ''localhost'', port = 6379, db = 0)
>>> connection1 = redis.Connection(host = ''localhost'', port = 6379, db = 1)
>>> connection0.connect()
Sin embargo, parece que no encuentro una forma de crear un objeto Redis a partir de la conexión.
>>> 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
¿Estoy cometiendo un error de novato aquí?
Realmente no deberías crear conexiones como esa. Permítanme citar la documentación de redis-py.
Detrás de escena, redis-py usa un grupo de conexiones para administrar las conexiones a un servidor Redis. De forma predeterminada, cada instancia de Redis que cree creará a su vez su propio grupo de conexiones. Puede anular este comportamiento y utilizar un grupo de conexiones existente pasando una instancia de grupo de conexiones ya creada al argumento connection_pool de la clase Redis. Puede optar por hacer esto para implementar la fragmentación del lado del cliente o tener un control de grano más fino de cómo se administran las conexiones.
>>> pool = redis.ConnectionPool(host=''localhost'', port=6379, db=0)
>>> r = redis.StrictRedis(connection_pool=pool)
No puede especificar una sola conexión para usar con la biblioteca. Cada instancia de Redis tendrá su propio grupo de conexiones. Cuando se llama a execute_command (), abrirá una conexión desde un grupo (o abrirá uno nuevo) y usará esa conexión. Si solo desea que su cliente tenga una conexión máxima a la vez, establezca max_connections en 1.