Ehcacheの設定とか使い方とか

ehcache.xmlでのキャッシュ設定

Ehcacheではクラスパスルートのehcache.xmlというXMLファイルで設定を行います。設定項目はかなり多岐に渡りますが、中でも肝になるキャッシュの設定について調べてみました。もちろんここで書いている項目以外にもクラスタリングやらトランザクションやら様々な設定がありますが、それらについてはまた別の機会にということで。

maxElementsInMemory
メモリに格納する最大エントリ数、0の場合は無制限
eternal
trueを指定した場合タイムアウト値は無視される
timeToIdleSeconds
キャッシュのアイドル秒数を指定、0の場合は無制限(デフォルトは0)
timeToLiveSeconds
キャッシュの有効秒数を指定、0の場合は無制限(デフォルトは0)
overflowToDisk
メモリへの格納数をこえた場合にディスクに格納するかどうかをtrueまたはfalseで指定
diskSpoolBufferSizeMB
ディスクキャッシュのスプールバッファとして割り当てるメモリ量を指定(デフォルトは30MB)
clearOnFlush
flush()メソッドが呼び出されたときにメモリキャッシュをクリアするかどうかをtrueまたはfalseで指定
copyOnRead
読み取り時にキャッシュ要素をコピーするかどうかをtrueまたはfalseで指定(デフォルトはfalse)
copyOnWrite
書き込み時にキャッシュ要素をコピーするかどうかをtrueまたはfalseで指定(デフォルトはfalse)
maxElementsOnDisk
ディスクに格納する最大エントリ数、0の場合は無制限(デフォルトは0)
diskPersistent
VMを再起動する際にディスクキャッシュを永続化するかどうかをtrueまたはfalseで指定(デフォルトはfalse)
diskExpiryThreadIntervalSeconds
ディスクキャッシュの期限をチェックするスレッドの走行感覚を秒数単位で指定(デフォルトは120秒)
memoryStoreEvictionPolicy
メモリに格納するエントリが最大値に達したときの振る舞いをLRU、FIFO、LFUのいずれかで指定(デフォルトはLFU)
statistics
統計情報を取得するかどうかをtrueまたはfalseで指定(デフォルトはfalse)

Ehcacheの簡単な使い方

Ehcacheの設定ファイルであるehcache.xmlではcache要素でキャッシュを定義できます。たとえばこんな設定をしておくと…

<?xml version="1.0" encoding="UTF-8"?>
<ehcache>
  <diskStore path="java.io.tmpdir"/>
   
  <defaultCache
    maxElementsInMemory="10000"
    eternal="false"
    timeToIdleSeconds="120"
    timeToLiveSeconds="120"
    overflowToDisk="true" />
       
  <cache name="sampleCache1"
    maxElementsInMemory="10000"
    eternal="false"
    timeToIdleSeconds="120"
    timeToLiveSeconds="120"
    overflowToDisk="true" />
</ehcache>

Javaコードではキャッシュ名を指定してCacheオブジェクトを取得することができます。Cacheオブジェクトに対してput()やget()でキャッシュエントリの追加、取得を行うことができます。

CacheManager manager = CacheManager.getInstance();

try {
  Cache cache = manager.getCache("sampleCache1");

  // キャッシュエントリの登録
  cache.put(new Element("key1", "value1"));

  // キャッシュエントリの取得
  Element element = cache.get("key1");
  System.out.println(element.getValue());

  // キーを指定してキャッシュエントリを削除
  cache.remove("key1");
  // すべてのキャッシュエントリを削除
  cache.removeAll();

} finally {
  manager.shutdown();
}

プログラム中で動的にCacheの定義を追加することもできます。以下のようにするとdefaultCache要素で定義した設定情報を持つCacheを追加することができます。

CacheManager manager = CacheManager.getInstance();
manager.addCache("sampleCache2");
Cache cache = manager.getCache("sampleCache2");
...

また、Cacheクラスのコンストラクタで上で書いたような設定情報を指定することができるので、自分でCacheオブジェクトをnewしてCacheManagerにaddCache()することもできます。