ehcacheは非常に構成可能な獣であり、例はかなり複雑で、多くの場合、インターフェースの多くの層が関係しています。
単一の数値のようなものをメモリにキャッシュする最も簡単な例に遭遇した人はいますか(XMLではなく、Javaの可能な限り少ない行)。数値は、たとえばキャッシュされます。 60秒後、次の読み取り要求により、新しい値が取得されます(例:Random.nextInt()を呼び出すなど)。
シングルトンと少しの同期を使用して、このようなものに対して独自のキャッシュを書き込む方が速く/簡単ですか?
春はありません。
EhCacheには、妥当な有効期限(120秒)を持つフェイルセーフ構成が付属しています。これは、起動して実行するのに十分です。
輸入:
import net.sf.ehcache.CacheManager;
import net.sf.ehcache.Element;
次に、キャッシュの作成は非常に簡単です。
CacheManager.getInstance().addCache("test");
これにより、test
というキャッシュが作成されます。すべて同じCacheManager
で管理された、多くの異なる個別のキャッシュを持つことができます。このキャッシュに(key, value)
ペアを追加するのは、次のように簡単です。
CacheManager.getInstance().getCache("test").put(new Element(key, value));
指定されたキーの値の取得は、次のように簡単です。
Element elt = CacheManager.getInstance().getCache("test").get(key);
return (elt == null ? null : elt.getObjectValue());
デフォルトの120秒の有効期限後にエレメントにアクセスしようとすると、キャッシュはnullを返します(そのため、elt
がnullかどうかを確認するためのチェック)。独自のehcache.xml
ファイルを作成することにより、有効期限を調整できます。そのためのドキュメントは、ehcacheサイトに適切です。
Jbrookoverの答えの実用的な実装:
import net.sf.ehcache.CacheManager;
import net.sf.ehcache.Element;
import net.sf.ehcache.Cache;
public class EHCacheDemo {
public static final void main(String[] igno_red) {
CacheManager cchm = CacheManager.getInstance();
//Create a cache
cchm.addCache("test");
//Add key-value pairs
Cache cch = cchm.getCache("test");
cch.put(new Element("tarzan", "Jane"));
cch.put(new Element("Kermit", "Piggy"));
//Retrieve a value for a given key
Element elt = cch.get("tarzan");
String sPartner = (elt == null ? null : elt.getObjectValue().toString());
System.out.println(sPartner); //Outputs "Jane"
//Required or the application will hang
cchm.removeAllCaches(); //alternatively: cchm.shutdown();
}
}