A-A+

非阻塞式缓存框架 Strato NCache

2016年08月19日 Linux 软件 暂无评论 阅读 921 次

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

标签:

给我留言

Copyright © SEARU.ORG 保留所有权利.   Theme  Ality 网站地图 360网站安全检测平台

用户登录

分享到: