新聞中心
開發(fā)架構(gòu)中,經(jīng)常把ehcache+redis兩集緩存來做配合。。通常ehcache+redis+mysql 來作為三層存儲(chǔ)架構(gòu),最后到數(shù)據(jù)庫(kù),然后db----->redis ---->ehcache 來供程序查詢使用。。
而ehcache本身也支持3級(jí)緩存 “堆內(nèi)內(nèi)存、堆外內(nèi)存、磁盤存儲(chǔ)”
作為本地緩存框架, Ehcache支持多層緩存模式,常用的有三種數(shù)據(jù)存儲(chǔ)介質(zhì):
1堆內(nèi)
直接在JVM堆中存儲(chǔ)JAVA對(duì)象,優(yōu)點(diǎn)是速度快;缺點(diǎn)是會(huì)增加GC的頻次和GC時(shí)間。
2堆外
在堆外內(nèi)存中存儲(chǔ)序列化的JAVA對(duì)象,優(yōu)點(diǎn)是不會(huì)增加GC;缺點(diǎn)是存取速度較慢,需要額外的時(shí)間處理序列化和反序列化。
3 磁盤
緩存數(shù)據(jù)到磁盤,優(yōu)點(diǎn)是掉電不會(huì)丟失數(shù)據(jù),可用空間更大;缺點(diǎn)是存取速度比堆外慢很多。
4三種結(jié)構(gòu)一起使用,結(jié)構(gòu)如上圖。
5時(shí)序圖
在Ehcache的多層緩存結(jié)構(gòu)中,最底層被稱為Authoritative Tier,其余的緩存層被稱為Caching Tier。Authoritative Tier層數(shù)據(jù)是最全的,其余層的數(shù)據(jù)都是該層的數(shù)據(jù)子集,只是臨時(shí)存儲(chǔ)數(shù)據(jù)。
比如,堆內(nèi)+堆外模式中,堆外為Authoritative Tier。堆內(nèi)+堆外+磁盤模式中,磁盤為Authoritative Tier。
6 序列化
堆外和磁盤存儲(chǔ)時(shí),必須先將對(duì)象序列化為java.nio.ByteBuffer,Ehcache允許用戶按下面的代碼傳入自定義的序列化類。
7 轉(zhuǎn)一個(gè)demo
import java.io.File;
import org.ehcache.Cache;
import org.ehcache.PersistentCacheManager;
import org.ehcache.UserManagedCache;
import org.ehcache.config.builders.CacheConfigurationBuilder;
import org.ehcache.config.builders.CacheManagerBuilder;
import org.ehcache.config.builders.ResourcePoolsBuilder;
import org.ehcache.config.builders.UserManagedCacheBuilder;
import org.ehcache.config.units.EntryUnit;
import org.ehcache.config.units.MemoryUnit;
public class Main {
public static void main(String[] args) {
PersistentCacheManager persistentCacheManager = CacheManagerBuilder.newCacheManagerBuilder()
.with(CacheManagerBuilder.persistence(getStoragePath() + File.separator + "myData"))
.withCache("threeTieredCache",
CacheConfigurationBuilder.newCacheConfigurationBuilder(Integer.class, String.class,
ResourcePoolsBuilder.newResourcePoolsBuilder()
.heap(10, EntryUnit.ENTRIES) //堆
.offheap(1, MemoryUnit.MB) //堆外
.disk(20, MemoryUnit.GB) //磁盤
)
).build(true);
Cache threeTieredCache = persistentCacheManager.getCache("threeTieredCache", Integer.class, String.class);
//讀
for (int i=0;i<=20000;i++){
threeTieredCache.put(i, "$"+i);
}
//寫
for (int i=0;i<=200000;i++){
String value = threeTieredCache.get(i);
System.out.println("get at "+i+":"+value);
}
persistentCacheManager.close();
}
private static String getStoragePath() {
// TODO Auto-generated method stub
return "d:";
}
}
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國(guó)服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡(jiǎn)單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場(chǎng)景需求。
當(dāng)前題目:ehcache的三級(jí)緩存-創(chuàng)新互聯(lián)
本文網(wǎng)址:http://fisionsoft.com.cn/article/cshijo.html