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()することもできます。