hkeys help exist commands cli cache basics python redis connection-pooling

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.