Ehcache使用用例
Ehcache使用用例(一)
Singleton創建方式 |
Ehcache1.2版本之后,都可以使用singleton(工廠創建方法)去創建一個singleton的CacheManager實例。
CacheManager.create();
String[] cacheNames = CacheManager.getInstance().getCacheNames();
使用默認配置創建CacheManager
CacheManager manager = new CacheManager();
String[] cacheNames = manager.getCacheNames();
使用配置文件創建指定的CacheManager
CacheManager manager1 = new CacheManager(“src/config/ehcache1.xml”);
CacheManager manager2 = new CacheManager(“src/config/ehcache2.xml”);
String[] cacheNamesForManager1 = manager1.getCacheNames();
String[] cacheNamesForManager2 = manager2.getCacheNames();
配置文件加載方式 |
· CacheManager manager = new CacheManager();會在classpath路徑下找ehcache.xml配置文件。
· CacheManager manager = new CacheManager(“src/config.ehcache.xml”); 也可以根據相對文件路徑來加載配置文件.
· 通過URL加載
URL url = getClass().getResource(“/anotherconfigurationname.xml”);
CacheManager manager = new CacheManager(url);
· 通過流加載
InputSream fis = new FileInputStream(new File(“src/config/ehcache.xml”).getAbsolutePath());
Try {
CacheManager manager = new CacheManager(fis);
} finally {
Fis.close();
}
編碼實現添加和緩存 |
Ehcache中不僅可以用配置文件來配置緩存,而在代碼中也可以實現同樣的功能。
CacheManager singletonManager = CacheManager.create();
Cache memoryOnlyCache = new Cache(“testCache”, 50000, false, false, 8, 2);
Cache test = singletonManager.getCache(“testCache”);
刪除只需要調用singletonManager.removeCache(“testCache”);
Shotdown CacheManager |
在使用完Ehcache后,必須要shutdown緩存。Ehcache中有自己的關閉機制,不過最好在你的代碼中顯示調用CacheManager.getInstance().shutdown();
Ehcache使用實例(二)
Cache使用 |
l 得到一個Cache引用
獲得一個sampleCache1的引用,從官方下載ehcache.xml,在ehcache.xml中已經有配置好的緩存,大家直接使用就可以,或是做測試,如果說真正使用的時候,最后自己手動配置一個比較好。
Cache cache = manager.getCache(“sampleCache1”);
l 使用Cache
Put一個Element到cache中
Cache cache = manager.getCache(“sampleCache1”);
Element element = new Element(“key1”,”value1”);
cache.put(element);
update一個element時,只要在構造element時將相同的key傳入,在調用cache.put(element),這是Ehcache會根據key到緩存中找到對應的element并做更新。
Cache cache = manager.getCache(“sampleCache1”);
Cache.put(new Element(“key1”, “value1”));
更新element
Cache.put(new Element(“key1”, “value2”));
根據key取得對應element的序列化value值
Cache cache = manager.getCache(“sampleCache1”);
Element element = cache.get(“key1”);
Serializable value = element.getValue();
根據key取得對應element的非序列化value值
Cache cache = manager.getcache(“samplecache1”);
Element element = cache.get(“key1”);
Ojbect value = element.getObjectValue();
從cache中移除key對應的element
Cache cache = manager.getCache(“sampleCache”);
Element element = new Element(“key1”, “value1”);
Cache.reomve(“key1”);
l 磁盤持久化
SampleCache1的配置是支持磁盤持久化的。如果想要保證element即時的被輸出到磁盤,可以調用cache.flush();
Cache cache = manager.getcache(“samplecache1”);
Cache.flush();
l Cache Sizes
獲得當前cache中的element數量。
Cache cache = manager.getCache(“sampleCache1”);
Int elementsInMemory = cache.getSize();
獲得當前MemoryStore中的element數量。
Cache cache = manager.getCache(“sampleCache1”);
long elementsInMemory = cache.getMemoryStoreSize();
獲得當前DiskStore中element數量。
Cache cache = manager.getCache(“sampleCache1”);
long elementsInMemory = cache.getDiskStoreSize();
l Cache Hits and Misses
所謂的hits就是緩存訪問次數,而misses就是緩存中每個element的丟失次數。這些參數對優化緩存配置有很大的幫助。
獲得緩存中請求的element被找到的次數。
Cache cache = manager.getCache(“sampleCache1”);
Int hits = cache.getHitCount();
獲得請求的element在MemoryStore中被找到的次數。
Cache cache = manager.getCache(“sampleCache1”);
Int hits = cache.getMemoryStoreHitCount();
獲得請求的element在DiskStore中被找到的次數。
Cache cache = manager.getCache(“sampleCache1”);
Int hits = cache.getDiskStoreHitCount();
獲得請求的element在MemoryStore中沒有被找到的次數。
Cache cache = manager.getCache(“sampleCache1”);
Int hits = cache.getMissCountNotFound();
獲得請求的element在MemoryStore中沒有被找到的次數。
Cache cache = manager.getCache(“sampleCache1”);
Int hits = cache.getMissCountNotFound();
獲得緩存中失效element沒有被找到的次數。
Cache cache = manager.getcache(“samplecache1”);
Int hits = cache.getMissCountExpired();
創建一個默認配置cache |
manager.addCache(String cachename);這個方法可以說是Ehcache很靈活的體現,通常我們想要添加一個新的cache到CacheManager中時,應該調用manager.addCache(Cache cache);可以看到入參是一個Cache類型對象,而前面那段代碼,Ehcache會自動使用默認配置創建一個名字為輸出參數的cache供使用,是不是很方面呢。
使用自定義參數創建一個cache |
Ehcache允許通過編碼的方式創建一個自定義Cache,也就是調用構造方法。
Public Cache(String name, int maxElementsInMemory, MemoryStoreEvictionPolicy memoryStoreEvictionPolicy, Boolean overflowToDisk, Boolean eternal, long timeToLiveSeconds, long timeToIdleSeconds, Boolean isdkPersistent, long diskExpiryThreadIntervalSeconds) {}
以上就是Cache的構造函數。
CacheManager manager = CacheManager.create();
Cache cache = new Cache(“test”, maxElements, MemoryStoreEvictionPolicy.LFU, true, false, 60, 30, false, 0);
Manager.addCache(testCache);
以上代碼是創建一個緩存添加到cachemanager中,緩存名字為test,內存驅逐策略是LFU,允許輸出到磁盤,element不是永久有效的,element最大存活時間是60秒,element最大閑置時間30秒,不會持久化到磁盤,失效element清理線程運行時間間隔是0秒。