https://github.com/andymccurdy/redis-py
Rubyでquit()メソッドを使用していることを知っています。Pythonについては何も見つかりません。
python:
import redis
r = redis.StrictRedis(Host='localhost', port=6379, db=0)
r.set('foo', 'bar')
print r.get('foo')
#r.close() doesn't work
Ruby
require "redis"
redis = Redis.new
redis.set("mykey", "hello world")
puts redis.get("mykey")
redis.quit()
redis.Redis
を使用してください。内部で接続プールを使用するため、そのレベルでの管理について心配する必要はありません。
低レベルの接続を絶対に使用する必要がある場合は、redis.Redis
によって通常行われる応答処理を行う必要があります。
低レベル接続を使用して単一のコマンドを実行する例を次に示します。
def execute_low_level(command, *args, **kwargs):
connection = redis.Connection(**kwargs)
try:
connection.connect()
connection.send_command(command, *args)
response = connection.read_response()
if command in redis.Redis.RESPONSE_CALLBACKS:
return redis.Redis.RESPONSE_CALLBACKS[command](response)
return response
finally:
del connection
使用例:
response = execute_low_level(
'HGET', 'redis:key', 'hash:key', Host='localhost', port=6379)
しかし、前にも言ったように、redis.Redis
は99.9%のケースで対処する方法です。
StrictRedisは接続セマンティクス自体を実装せず、代わりにStrictRedisインスタンスのプロパティとして使用可能な接続プールを使用します:S.connection_pool
。 connection_poolオブジェクトにはdisconnect
メソッドがあり、必要に応じてプール内のすべての接続を即座に切断しますが、StrictRedisオブジェクトが範囲外になると、プール内の個々の接続はすべてユーザーの介入なしにクリーンアップされます( redis/connection.py:392-396を参照)
Redis接続プールを使用します。明示的に閉じる必要はありません。
import redis
pool = redis.ConnectionPool(Host='localhost', port=6379, db=0)
r = redis.Redis(connection_pool=pool)
そして効率を改善できます。
ソースコードでConnectionPool.lookを使用する場合、心配する必要はありません。
def execute_command(self, *args, **options):
"Execute a command and return a parsed response"
pool = self.connection_pool
command_name = args[0]
connection = pool.get_connection(command_name, **options)
try:
connection.send_command(*args)
return self.parse_response(connection, command_name, **options)
except (ConnectionError, TimeoutError) as e:
connection.disconnect()
if not connection.retry_on_timeout and isinstance(e, TimeoutError):
raise
connection.send_command(*args)
return self.parse_response(connection, command_name, **options)
finally:
pool.release(connection)
最後に、あなたが何をしても、すべての接続がプールに解放され、他のクライアントに割り当てられます。