Tornado から Redis に適切にクエリを実行するにはどうすればよいでしょうか? 質問する

Tornado から Redis に適切にクエリを実行するにはどうすればよいでしょうか? 質問する

Tornado から Redis (または任意の DB) をクエリするための推奨方法が何であるかを知りたいです。

次のような例を見たことがあります出典: github.comしかし、それらはすべて Redis へのブロッキング呼び出しを使用しているようです。

私の理解では、Tornado が停止するのを避けるためには、Twisted 用に開発されたもののような非ブロッキング DB ライブラリを使用する必要があるようです。

私が間違っているのでしょうか? これはどのように行うべきでしょうか?

ベストアンサー1

BLPOPのようなコマンドをブロックしたり、Pub/Subチャネルをリッスンしたりするには、次のような非同期クライアントが必要になります。竜巻-レディスまずはこのデモどのように竜巻-レディスクライアントは、シンプルなパブリック チャット アプリケーションを開発するために使用できます。

しかし、同期を使用することをお勧めしますredis-pyクライアントと連携してハイレディス他のほとんどの場合も同様です。

非同期クライアントの主な利点は、サーバーが Redis サーバーの応答を待っている間に受信リクエストを処理できることです。ただし、Redis サーバーは非常に高速であるため、ほとんどの場合、Tornado アプリケーションで非同期コールバックを設定するオーバーヘッドにより、Redis サーバーの応答を待つ時間よりも、リクエスト処理の合計時間が増加します。

非同期クライアントを使用すると、Redis サーバーに複数のリクエストを同時に送信しようとする可能性がありますが、Redis サーバーはシングルスレッド サーバー (Tornado サーバーと同様) であるため、これらのリクエストに 1 つずつ応答し、ほとんど何も得られません。また、実際には、パイプラインと MGET/MSET などのコマンドがある限り、同じ Redis サーバーに複数の Redis コマンドを同時に送信する必要はありません。

非同期クライアントは、複数のRedisサーバーインスタンスを使用する場合にいくつかの利点がありますが、同期(redis-py)クライアントと次のようなプロキシを使用することをお勧めします。twemproxyまたはこれです(後者はパイプラインと MGET/MSET コマンドをサポートします)。

また、Tornadoアプリケーションでredis-pyクライアントを使用する場合は、接続プールを使用しないことをお勧めします。Redisアプリケーションが接続する Redis データベースごとに1 つのオブジェクト インスタンスを作成するだけです。

おすすめ記事