Strato NCache - 非阻塞式缓存框架
Apache
跨平台
Java
软件简介
缓存是服务器程序中经常用到的技术,使用缓存可以大大降低服务器的压力。目前常见的缓存工具都很好地解决了生命周期、存储、命中率等关键算法,但是绝大多数的缓存框架对于数据更新都是阻塞式的,即当缓存过期时会等待应用程序重新获取值。其性能曲线类似下图(假设刷新一次需要5ms):
阻塞式的缓存处理方式,每次的重新取值都会出现一次波峰,用户在使用系统的过程中将产生顿挫感。
NCache 建立了一套抽象的非阻塞式缓存模型与 API,应用 NCache 的缓存处理时效如下图所示:
使用 NCache 仅需在首次加载数据时停顿,此后的更新都将在后台线程完成。
NCache特性一览:
-
仅首次加载时阻塞,此后刷新都由后台完成
-
开发者可自定义线程池,控制线程调度及溢出机制
-
默认提供基于 FIFO 的内存存储,对象超出将被移除
-
支持链式数据存储,开发者可附加其他存储方式,如 Redis、Memcached、Ehcache
快速上手:
NCache 使用非常简单,只需将 jar 包放入classpath,然后即可调用。下面是一个简单的示例:
int cacheTTL=5*1000;//缓存有效期5秒钟
NCache<String> ncache=NCache.newInstance();//ncache可复用
ncache.setTimeToLive(cacheTTL);
DataLoader<String> loader=new DataLoader<String>() {//loader可复用
@Override
public String load() throws Exception {
int expense=new Random().nextInt(2000);//随机模拟取数据性能消耗
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 密码:无)