2012-01-24 58 views
8

Tôi đang sử dụng Redis để lưu trữ hai cơ sở dữ liệu: 0 và 1 qua thư viện khách hàng Redis-py. Tôi muốn tạo hai kết nối cho mỗi cơ sở dữ liệu. Hiện tại, tôi đang thực hiện việc này:Tạo và quản lý nhiều kết nối trong Redis Python

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

Tuy nhiên, tôi dường như không tìm cách tạo đối tượng Redis từ kết nối.

>>> 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 

Tôi có mắc lỗi tân binh ở đây không?

Trả lời

10

Bạn thực sự không nên tạo các kết nối như vậy. Hãy để tôi trích dẫn tài liệu redis-py.

Phía sau hậu trường, redis-py sử dụng hồ bơi kết nối để quản lý các kết nối kết nối với máy chủ Redis. Theo mặc định, mỗi phiên bản Redis bạn tạo lần lượt sẽ tạo hồ bơi kết nối của riêng nó. Bạn có thể ghi đè lên hành vi này và sử dụng hồ bơi kết nối hiện có bằng cách chuyển một cá thể đã kết hợp đã được tạo vào pool_pool đối số của lớp Redis. Bạn có thể chọn thực hiện việc này để thực hiện tích hợp phía máy khách hoặc kiểm soát hạt mịn hơn về cách quản lý các kết nối .

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

Bạn không thể chỉ định một kết nối duy nhất được sử dụng với thư viện. Mỗi phiên bản Redis sẽ có một nhóm kết nối riêng. Khi execute_command() được gọi, nó sẽ bật một kết nối từ một hồ bơi (hoặc mở một cái mới) và sử dụng kết nối đó. Nếu bạn chỉ muốn khách hàng của mình có tối đa một kết nối tại một thời điểm, hãy đặt max_connections thành 1.

Các vấn đề liên quan