Redis X Java入門。RedisのインストールからクライアントライブラリJedisの使い方まで

Redistとは、永続化機能を備えたKVSです。
http://redis.io/
インターフェースはmemcachedとほぼ同じですが、Redisの方が永続化も含めてできることが多いので摘要できるところはいろいろありそうです。
とりあえず、co-meetingのセッション管理に使うことにしたので、Hello Worldまでのメモを残しておきます。

インストール方法

2011年9月1日現在のUbuntu 10.10のリポジトリでインストールされるRedisのバージョンは2.0.0-rc2-1です。
rcなのが気になりますが、古くはないのでとりあえずapt-getでインストールしてみました。

$ sudo apt-get install redis-server

telnetで動作を確認

Redisの動作をすぐに確認するには、telnetでコマンドを打つの手っ取り早いです。
http://try.redis-db.com/でもコマンドを試せます。

コマンドの一覧はこちら
http://redis.io/commands

文字列の追加/削除をtelnetから試してみます。Redisのデフォルトポートは6379です。

$ telnet localhost 6379
set mykey 5   <- setコマンドで文字列を保存します。パラメータに文字列長を指定していますが、
Hello            新しいバージョンでは直接文字列を指定できるようになっています。(http://redis.io/commands/set)
+OK
keys *        <- keysコマンドは保存されているキーを確認することができます。 
*1         ここではすべてのキーを表示しています。(http://redis.io/commands/keys)
$5
mykey
get mykey     <- getにキーを指定して文字列を取得。(http://redis.io/commands/get)
$5
Hello
del mykey     <- getで削除。(http://redis.io/commands/del)
:1
keys *
*0

Javaのクライアントライブラリ

クライアントライブラリは非常にたくさんあります。
http://redis.io/clients
Javaだけでも4つ

  • Jedis: ★ Repository xetorthio
  • JRedis: Repository Homepage SunOf27
  • JDBC-Redis: Repository Homepage mavcunha
  • RJC: Repository e_mzungu

スターがついているのがおすすめだそうなので、今回、おすすめにもなっているJedisを試してみました。

また、stackoverflowのQA「Best Redis library for Java」でも、JDBCは遅いからJedisかJRedisを使った方がいいと書いてあります。

Jedisの入手と環境構築

JedisはGithubにて公開されています。
https://github.com/xetorthio/jedis
[Downloads]からjedis-2.0.0.jarをダウンロードできます。

Jedisのpom.xmlを見ると以下の2つ依存ライブラリがあります。

  • junit 4.8.1
  • commons-pool 1.5.5

実行時にはcommons-poolのみクラスパスに含める必要があります。

Jedisの使い方

ライブラリの使い方はWikiに詳しく載っています。
telnetで試した操作を一通り再現するとこんな感じです。

import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig;

public class HelloJedis {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		JedisPool pool = new JedisPool(new JedisPoolConfig(), "localhost");
		Jedis jedis = pool.getResource();
		try {
		  jedis.set("mykey", "Hello");
		  System.out.println(jedis.keys("*"));
		  System.out.println(jedis.get("mykey"));
		  jedis.del("mykey");
		  System.out.println(jedis.keys("*"));
		} finally {
		  pool.returnResource(jedis);
		}
		pool.destroy();
	}

}

実行結果

[mykey]
Hello
[]