Javaでmemcachedを利用する際に、
1.キーからオブジェクトget
2.オブジェクトがnullならデータ取得
3.2で取得したデータをmemcachedにset
というのは割りとよくある一連の実装だと思います。
前職でC#を使っているときはdelegate(ラムダ式)を使って
1つのメソッドで一連の処理を実装していました。
Javaでも同じように実装してみます。
Delegateはこんなかんじでいいのかな…
Delegate interfaceを定義、そのgetメソッドから取得するように。
public class Memcached {
protected static MemCachedClient mcc = new MemCachedClient();
static {
SockIOPool pool = SockIOPool.getInstance();
//設定
pool.initialize();
}
public static <T> T get(String key, Memgetable<T> delegate, Date expire){
Object ret = null;
ret = mcc.get(key);
if (ret != null) return ret;
ret = (T) delegate.get();
if (ret == null) return null;
mcc.set(key, ret, expire);
return ret;
}
public interface Memgetable<T> {
public T get();
}
}
呼び出しは、
String key = "test_key";
final String value = "test_value";
Memcached.get(key, new Memgetable<String>() {
public String get() {
return value;
}
}, new Date());
こんなかんじで、一行で出来ます。
Delegate interfaceにgetメソッドを定義し値がなければメソッドから値を取得します。
ラムダ式周りはC#が素晴らしすぎてJavaの非力さが露呈してしまう。。
Java 8ではもっと楽に実装できるようになるのかしら。
0 件のコメント:
コメントを投稿