Lettuce 5

Takami Torao Redis 4 Lettuce 5 #Redis #Lettuce
  • このエントリーをはてなブックマークに追加

Introduction

Lettuce は Java 8 向けの Redis API ライブラリ。完全なノンブロッキングで実装されており非同期/同期の両方で利用することができる。

クラスタ化

Lettuce からクラスタ構成の Redis を使用するには RedisClusterClient を使用する。接続前に reloadPartitions() を実行する必要がある。

単一パーティション構成のトランザクションは Redis サーバ側でのシングルスレッドによって成り立っている。このためパーティションが複数となるクラスタ構成では multi(), exec() のトランザクション機能を使うことができない。クラスタ構成では Lua スクリプトを使用することでトランザクションを実装する (未確認)。

コネクションプール

Lettuce は StatefulRedisConnectionStatefulRedisClusterConnection がスレッドセーフであるためそれらをアプリケーション内で共有することができる。この場合、ネットワーク切断時の自動再接続もライブラリに実装されている。

Lettuce では Apache Commons Pool 2 を使用した Connection Pooling を使用する方法もあるが、多くの場合は不必要に TCP セッションを消費するだけであるため、理由が無ければコネクションのアプリケーション内共有を行う方が良い。

コネクションプールが必要なケースの一つは非クラスタ環境で multi()exec() を使用したトランザクション操作を行う場合である (クラスタ環境ではそれらは使えない)。この状況ではコネクションの共有によりトランザクション状態の不整合が起きるためプール化したコネクションを使用する必要がある。他のケースとして scan 系の操作を使用して巨大なデータを反復的に取得するような状況では、他の処理に影響を与えないようにコネクションプールを使用して通信を隔離する必要があるかもしれない。

Lettuce のコネクションプール実装は同時使用数が接続最大数を超えると、リソースが解放されるのを待つのではなく Pool exhaust の例外が発生する点に注意。

参考リンク