2017-09-06 6 views
1

私はREDIS worldを初めて使用しています。私はREDISから3000キーの値を取得しようとしています。各ハッシュには、取り出す6つの値があります。私はPython 3.5を使用してREDISへの接続を1回行い、キーハッシュをループしてREDISからそれぞれの値を取得しています。しかし、現在、これらの3000行の値を取得するのに約10秒かかります。私は以下のコードを使ってREDISからデータを取得しています。フェッチを高速化するのに手伝ってください。一度にすべてのキーを送信し、それらに関連する値を取得する方法はありますか?私はこれのためにPython 3.5を使用しています。3000キーハッシュのRedis値フェッチには約10秒かかります(python 3.5)

redis_pool = redis.ConnectionPool(host='XYZ', 
            port='XY', 
            db='X') 
r = redis.Redis(connection_pool=red_pool) 

field1 = r.hmget(primary_key, "Field1") 
+0

はこれだけのハッシュと3000フィールドまたは3000ハッシュですか? – GuangshengZuo

+0

そしてあなたのコードではちょうど 'hget'です。 – GuangshengZuo

+0

@GuangshengZuoそれはキーごとに6つの値を持つ3000ハッシュです。 –

答えて

3

クエリを高速化するには、pipelineを試してください。

r = redis.Redis(connection_pool=red_pool) 
pipe = r.pipeline() 
for key in keys_list: 
    pipe.hget(key, "field1") 
results = pipe.execute() 

resultsはすべてのhget応答のリストになります。 python redis clientでパイプラインを使用する方法の詳細については、redis-pyのreadmeのパイプラインセクションを参照してください。

+0

お返事ありがとうございます@GuangshengZuo。私は明日あなたにこのアプローチを使って取る時間(パフォーマンス)についてお話します。 –

+0

私はパイプラインを使用し、それはほぼ10秒から5〜6秒に時間を下げるのを助けました。 REDISの終わりからこのクエリを高速化する他の方法はありますか? –

+0

私は、あなたがredisで使用するデータ型を変更せず、常にすべてのハッシュキーを反復する必要がある場合は、redis終了時にスピードアップする方法がないことを恐れています。しかし、一度にすべての値を取得したいだけなら、ハッシュを使うべきではありません。すべての値をリストに入れておき、 'lrange'を使って値を取得することができます。 – GuangshengZuo

関連する問題