缓存是服务器程序中经常用到的技术,使用缓存可以大大降低服务器的压力。目前常见的缓存工具都很好地解决了生命周期、存储、命中率等关键算法,但是绝大多数的缓存框架对于数据更新都是阻塞式的,即当缓存过期时会等待应用程序重新获取值。其性能曲线类似下图(假设刷新一次需要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 密码:无)