RedisのJavaクライアント「Redisson」を使ってみた

はじめに

Redis

こんにちは、文字コードおじさんです。今回はRedisネタで推して参ります。

JavaのRedisクライアントというと、Jedisが圧倒的に有名だと思いますが、今回はRedissonというクライアントを紹介します。

RedissonはJavaのMapやListなどを使う感覚でRedis上にデータを保存・読み出しすることができます。他のクライアントライブラリと違い、Redisのコマンドを意識すること無く利用できます。

対応しているRedisは2.6以降、JDKは1.6以降。ライセンスはApache License 2.0、本稿執筆時点(2015/02/18)でのバージョンは1.2.0のようです。

準備

なにはともあれ、まずは依存関係を追加しましょう。

Gradleをお使いの方は以下の通りです。

Mavenの場合は以下です。

Configの生成

依存関係が解決したら、Redisへの接続設定などを管理するConfigクラスのインスタンスを生成します。

今回は単一のRedisサーバーへの接続をするための設定をします。

利用の準備はこれだけです。このほかにもレプリケーションやSentinel、Redis Clusterにも対応した設定が存在しますが、今回は割愛します。

実際に使ってみる

RMapを使ってみるテスト

Redissonが用意しているRMap型を試してみます。

java.util.concurrent.ConcurrentMapを使う要領でいけますね。この他にもRListやRSetといったデータ型が用意されています。

Redissonのデータ型とRedisのデータ型の対応

Redissonの用意しているデータ型とRedis側の対応関係を簡単にまとめてみました。

Redisson Redis 備考
RBucket String 文字列型だけで無く、任意のオブジェクトを格納可能
RMap Hash RMapのKeyがField、ValueがValueに相当する
RList List RList#getはO(n)操作なので注意
RSet Set
RQueue List
RDequeue List
RSortedSet List ZSetでは無い模様。redisson__sortedset__version__{キー名}というString型のデータが別途作成される

RListについてはRedisのリストが双方向連結リストで実装されている関係上、ArrayListと同じノリで要素数の大きなリストに対して RList#getを行うとパフォーマンス的に危険ですね。

そのほかにできること

FLUSHDBコマンド

Redisson#flushdbで可能です。現在接続中のDBの中身がすべて消去されます。なお、 FLUSHALLコマンドに対応するものは実装されていないようです。

DELETEコマンド

キーを削除する場合は、コレクション側で deleteメソッドを呼べばOKです。

まとめ

Redisが提供しているコマンドにすべて対応しているわけではありませんが、コレクション操作の感覚でRedisが扱えてしまう点は素晴らしいですね。Jedisに比べるとまだまだマイナーな感(下図)はありますが、今後の更新に期待したいところです。

ではまた。