2017-02-06 15 views
0

現在のプロジェクトをJedisからLettuceに移植しています。レタス:反応性APIの共有接続

  1. リアクティブAPIには共有接続を使用してもよろしいですか? BLPOPやMULTI/EXECなどのブロックやトランザクション操作を呼び出さない限り、

  2. リアクティブAPIによるトランザクションでプール接続を使用する必要がありますか?

  3. リアクティブAPIを介してコマンドをパイプライン処理することはできますか?それ専用の接続を使うべきですか?

答えて

1

複数のスレッド間で1つの接続を共有するのが目的です。複数の理由があります。

  1. 接続はスレッドセーフです。
  2. Redisはシングルスレッドです。 1つのホストに複数の接続を使用することは、Redis処理の並列処理がないためにパフォーマンスが向上しないため、明らかに意味をなさないものです。
  3. 接続プーリングは複数の接続を開きます。これは、トランザクションとブロッキング・コマンドの分離には意味がありますが、プーリングするとパフォーマンスが低下する可能性があります。複数のアプリケーションサーバーから接続を受信する単一のRedisサーバーは、接続を受け入れて管理することで、まずビジー状態に保たれます。シングルスレッドのRedis性質は、接続を受け入れたり破棄したりするプロセスにも影響します。

パイプライニングについて:レタスは、レタスがデフォルトでパイプライニングを使用することを意味するレディスに後続のコマンドを送る前に、コマンド完了を待たない。パイプライン化を防止する唯一の方法は、コマンド呼び出し時の外部同期です。

各コマンドは、TCP接続に直接フラッシュされます。レタスはバッチ処理を使用してコマンドをグループ化してから接続にフラッシングすることができます。コマンドのフラッシュは手動のものであり、バルクロード用であり、反応的な使用のためではありません。

  1. ウィキは細部のより深いレベルであなたの質問に答える必要があります:https://github.com/mp911de/lettuce/wiki
  2. レタスがProject Reactorに基づいて反応ストリームAPIに離れRxJava 1から移行

    は、さらに2つのものがあります。これはレタス5.0で、最初のベータ版がすでに利用可能です。

HTH、

マーク

関連する問題