15

現在、基本mset機能を使用してキー/値を保存しています。

from common.redis_client import get_redis_client
cache = get_redis_client()
for k,v in some_dict.items():
   kw = {'key': value}
   cache.mset(kw) 

#later:
   cache.get('key')

各キー/値を個別に保存します(たとえば、1つのjsonではありません)dict全体を保存すると文字列になり、保存と取得時にシリアル化/逆シリアル化する必要があり、個別のキー/値へのアクセスが本当に必要です。

私の質問::mset一度に複数のキー/値を取得する方法はありますか? redis db への複数の書き込みの代わりに? 逆に、1 回のアクセスで複数の読み取り (取得) を行うことはできますか? (そしてはい - 私は多くの redis アクティビティが進行中で、負荷が高いです。私はこれを気にします)

4

2 に答える 2

26

Agisのコメント後に更新

現在 Python に推奨されている Redis クライアントであるRedis-pyを使用している場合は、必要な処理を正確に実行するパイプラインを使用できます。簡単な例を次に示します。

>>> r = redis.Redis(...)
>>> r.set('bing', 'baz')
>>> # Use the pipeline() method to create a pipeline instance
>>> pipe = r.pipeline()
>>> # The following SET commands are buffered
>>> pipe.set('foo', 'bar')
>>> pipe.get('bing')
>>> # the EXECUTE call sends all buffered commands to the server, returning
>>> # a list of responses, one for each command.
>>> pipe.execute()
[True, 'baz']

どの redis クライアントを使用しているかはわかりませんが、パイプラインをサポートしているか、redis-py への切り替えを検討する必要があります。

パイプラインに関する redisのドキュメントを参照してください。5倍のパフォーマンス向上が期待できることを説明していますが、重要な一括操作を実行してはならないことも説明しています(実行ごとに10000回の操作で問題ありません)。

于 2014-03-05T22:59:52.583 に答える