JavaからRedisを操作するライブラリを使ってみました。 Redisのページで薦められているライブラリは、3つあります。
- Jedis
- Lettuce
- Redisson
どのライブラリがトレンドとなっているかGoogle Trendで調べてみた結果、Lettuceがダントツで検索されています。
トレンドの結果からJedisとLettuceを使ってみました。
Jedisでの追加/取得/削除
Jedisは、Lettuceに比べるとRedisへの接続するためのコーディングが少なくてすみます。 これは、追加/取得/削除メソッド内でRedisへの接続があるか判定し、未接続であれば接続する処理が実装されているためです。 そのため、API使用者がRedisへの接続するための手続きを意識する必要がありません。
package sample.jedis; import redis.clients.jedis.Jedis; public class JedisSample { public static void main(String... args) { Jedis jedis = new Jedis("192.168.56.11", 6379); // Redisへの登録 jedis.set("key", "Hello, Redis used Jedis!"); // Redisから値を取得 System.out.println("key = " + jedis.get("key")); // Redisから削除 jedis.del("key"); jedis.close(); } }
Lettuceでの追加/取得/削除
Lettuceは、Jedisに比べてRedisへの接続部分のコーディングが必要になります。 Redisへの接続の実装をした上で、set/get/delをする必要があるので、少しコーディング量が増えますが、明示的にRedisへの接続の実装をしなければいけないというルールが明確になっているのは良いと思う。
package sample.lettuce; import io.lettuce.core.RedisClient; import io.lettuce.core.api.StatefulRedisConnection; import io.lettuce.core.api.sync.RedisCommands; public class LettuceSample { public static void main(String... args) { // Redisへの接続 RedisClient redisClient = RedisClient.create("redis://192.168.56.11:6379"); StatefulRedisConnection<String, String> connection = redisClient.connect(); RedisCommands<String, String> syncCommands = connection.sync(); // Redisへの登録 syncCommands.set("key", "Hello, Redis used Lettuce!"); // Redisからの取得 System.out.println("key = " + syncCommands.get("key")); // Redisからの削除 syncCommands.del("key"); connection.close(); redisClient.shutdown(); } }
Jedisの方が追加/取得/削除は速い
追加/取得/削除を1万回実行した実行時間を測定しました。 実行時間は、4回測定し、実行時間が近い3つの実行時間を平均した値です。
Jedisの方が全ての項目でLettuceよりも速いことが分かりました。 Lettuceは、測定時には、ロギングプロパティの設定をしていなかったため、ログ周りの設定による影響があるかもしれません。
ライブラリ | 追加 | 取得 | 削除 |
---|---|---|---|
Jedis | 1.4秒 | 1.4秒 | 1.4秒 |
Lettuce | 2.8秒 | 2.7秒 | 2.5秒 |
まとめ
Redis向けのJavaライブラリのLettuceとJedisを使ってみました。 それぞれ使い方にメリットはあると思いますが、個人的にはコミュニティの充実やログ出力による問題発生時の解析のしやすさ、また、トレンドの結果からLettuceを使うのが良いのかなと思いました。 DBとの連携も含めて、どちらのライブラリを使うか吟味する必要がありそうです。