Strato NCache非阻塞式緩存框架
緩存是服務(wù)器程序中經(jīng)常用到的技術(shù),使用緩存可以大大降低服務(wù)器的壓力。目前常見的緩存工具都很好地解決了生命周期、存儲、命中率等關(guān)鍵算法,但是絕大多數(shù)的緩存框架對于數(shù)據(jù)更新都是阻塞式的,即當(dāng)緩存過期時會等待應(yīng)用程序重新獲取值。其性能曲線類似下圖(假設(shè)刷新一次需要5ms):
阻塞式的緩存處理方式,每次的重新取值都會出現(xiàn)一次波峰,用戶在使用系統(tǒng)的過程中將產(chǎn)生頓挫感。
NCache 建立了一套抽象的非阻塞式緩存模型與 API,應(yīng)用 NCache 的緩存處理時效如下圖所示:
使用 NCache 僅需在首次加載數(shù)據(jù)時停頓,此后的更新都將在后臺線程完成。
NCache特性一覽:
-
僅首次加載時阻塞,此后刷新都由后臺完成
-
開發(fā)者可自定義線程池,控制線程調(diào)度及溢出機制
-
默認提供基于 FIFO 的內(nèi)存存儲,對象超出將被移除
-
支持鏈?zhǔn)綌?shù)據(jù)存儲,開發(fā)者可附加其他存儲方式,如 Redis、Memcached、Ehcache
快速上手:
NCache 使用非常簡單,只需將 jar 包放入classpath,然后即可調(diào)用。下面是一個簡單的示例:
int cacheTTL=5*1000;//緩存有效期5秒鐘
NCache<String> ncache=NCache.newInstance();//ncache可復(fù)用
ncache.setTimeToLive(cacheTTL);
DataLoader<String> loader=new DataLoader<String>() {//loader可復(fù)用
@Override
public String load() throws Exception {
int expense=new Random().nextInt(2000);//隨機模擬取數(shù)據(jù)性能消耗
String value="VALUE_"+expense;
System.err.println("Reloading:"+value);
Thread.sleep(expense);
return value;
}
};
for(int i=0;i<10000;i++){
String value=ncache.get("somekey", loader);
System.out.println("Get:"+value);
try {
Thread.sleep(500);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
源碼:https://svn.zim-soft.com/svn/strato/tags/ncache/strato.ncache.v2_6_5 (用戶名:guest 密碼:無)
評論
圖片
表情
