Создание и управление несколькими подключениями в Redis Python - PullRequest
8 голосов
/ 24 января 2012

Я использую Redis для хранения двух баз данных: 0 и 1 через клиентскую библиотеку 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

Я делаю новичкаошибка здесь?

1 Ответ

12 голосов
/ 24 января 2012

Вы действительно не должны создавать такие соединения. Позвольте мне процитировать документацию 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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...