2012-10-19 17 views
35

PythonアプリケーションでPythonアプリケーションでredis-pyを使用しています。私は必要なときにいつでもredisサーバへの接続を作成する方がよいと思いました。非常に頻繁に行われるのではなく、タイムアウトする可能性のある永続的な接続を望んでいないので、変数を保存または取得する必要があります。Pythonからredisへの接続を管理する

いくつかの基本的なチュートリアルを読む私はRedisクラスを使用して接続を作成しましたが、接続を閉じる方法は見つけられませんでした。これはRedisを初めて使用するためです。私は接続を管理するための最良の方法を使用しているかどうかはわかりませんので、私はこれについていくつかのアドバイスをしたいと思います。 これは私が今変数setティンまたはgetティンだ方法です:

import redis 

def getVariable(variable_name): 
    my_server = redis.Redis("10.0.0.1") 
    response = my_server.get(variable_name) 
    return response 

def setVariable(variable_name, variable_value): 
    my_server = redis.Redis("10.0.0.1") 
    my_server.set(variable_name, variable_value) 

私は基本的に最後の接続時間を保存するために、このコードを使用するかのように私のアプリとスタッフに行わ秒あたりの要求の平均値を取得するにはそれ。

ご協力いただきありがとうございます。

答えて

54

Pythonはオブジェクトを処理するために参照カウンタ機構を使用します。したがって、ブロックの最後では、my_serverオブジェクトが自動的に破棄され、接続が閉じられます。明示的に閉じる必要はありません。

これは、Redis接続を管理する方法ではありません。各操作のための接続/切断は高価すぎるので、接続を開いたままにする方がはるかに優れています。それは接続のプールを宣言することによって行うことができるのRedis-PYで:

import redis 

POOL = redis.ConnectionPool(host='10.0.0.1', port=6379, db=0) 

def getVariable(variable_name): 
    my_server = redis.Redis(connection_pool=POOL) 
    response = my_server.get(variable_name) 
    return response 

def setVariable(variable_name, variable_value): 
    my_server = redis.Redis(connection_pool=POOL) 
    my_server.set(variable_name, variable_value) 

接続プールの管理は、主に自動とRedisの-PY内で行われますのでご注意ください。

+0

ありがとう、私はそれについて知っていませんでしたが、もし私が接続プールを作成すれば、私はこのモジュールを外したときにそれを閉じる方法があるのでしょうか、それは必要ではありませんか? – jeruki

+2

不要です。 Pythonは、POOLオブジェクトへの最後の参照が破棄されるときに(ここではスクリプトの最後に)接続を閉じます。 –

+0

おかげさまでありがとうございました。私はすべて知っておく必要があります。 – jeruki

2

@ sg1990 10.000ユーザーが同時にレディを必要とする場合はどうすればよいですか?彼らは単一の接続を共有することはできませんし、あなたは自分自身にボトルネックを作りました。

接続プールを使用すると、任意の数の接続を作成して、とrelease()、つまりredis-py docsを使用できます。

すべての接続がオープンソケットを維持する必要があるため、ユーザーあたりの接続は巨大な過度の習慣です。このようにして、自動的に数を減らします。あなたのマシンが半分まで扱うことができる同時ウェブソケットユーザ。

+0

AFAIK接続プールは、明示的に指定するかどうかによって自動的に作成されます。ソースhttps://github.com/andymccurdy/redis-py/blob/master/redis/client.py#L493から見ることができます。 –

関連する問題