JCS是Jakarta的项目Turbine的子项目。它是一个复合式的缓冲工具。可以将对象缓冲到内存、硬盘。具有缓冲对象时间过期设定。还可以通过JCS构建具有缓冲的分布式构架,以实现高性能的应用。对于一些需要频繁访问而每访问一次都非常消耗资源的对象,可以临时存放在缓冲区中,这样可以提高服务的性能。而JCS正是一个很好的缓冲工具。缓冲工具对于读操作远远多于写操作的应用性能提高非常显著。

一、理解缓存的三个核心概念

Elements : JCS是一个对象缓存,能放置一些对象或是”elements”并通过key来访问它们,很像一个hashtable。可以想象JCS是一个能过Name来获取的hashtables的集合。

Regions : 每一个hashtables都被称做“region”,每一个region都能被独立于其他regions配置。例如,可以有一个称做城市的region,缓存了一些定期被改变的城市对象。可以定义一个region被叫做产品,缓存一些定期改变的产品数据。将可以配置易变的产品的regionelements 过期时间要快于city的region。

Auxiliaries : Auxiliaries是region能用的插件选项。核心的Auxiliaries是IndexedDisk Cache、TCPLateral Cache、RemoteCache Server。例如,磁盘缓存允许当内存达到阈值后把缓存对象交换到硬上。

二、下载JCS

可以从JCS官网下载JCS,可以查看JCS相关的文档。

三、获取JCS依赖的Jar包

JCS必备的Jar有两个,分别是jcs-1.3.jar和concurrent.jar,这两个jar都可以从官网下载。除此之外,我们最好也把Log4j所支持的jar包下载,因为那样方便我们打印一些日志。

四、配置JCS

在src目录下创建cache.ccf配置文件,将下面的内容Copy到文件中。

# DEFAULT  CACHE REGION

jcs.default=

jcs.default.cacheattributes=org.apache.jcs.engine.CompositeCacheAttributes

jcs.default.cacheattributes.MaxObjects=1000

jcs.default.cacheattributes.MemoryCacheName=org.apache.jcs.engine.memory.lru.LRUMemoryCache

这里需要注意的是,等号“=”之后不要留空格,否则cache.ccf不会识别。

五、开始使用JCS编程

5.1创建CacheWrapper类,使用其添加对象、获取对象和移除对象。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
package com.favccxx.favjcs;
import org.apache.jcs.JCS;
import org.apache.jcs.access.exception.CacheException;
import org.apache.jcs.engine.CacheElement;
public class CacheWrapper {
           
    public JCS jcsCache = null;
           
    public CacheWrapper(JCS cache){
        this.jcsCache = cache;
    }
           
    public void put(String key , Object value){
        try{
            jcsCache.put(key, value);
        }catch(CacheException e){
            e.printStackTrace();
        }
    }
           
    public Object get(String key){
        CacheElement cacheElement = (CacheElement) jcsCache.getCacheElement(key);
        if (null != cacheElement) {
            Object object = cacheElement.val;
            return object;
        }
        return null;
    }
           
}

5.2创建CacheFactory类,使用工厂管理缓存对象,用以初始化缓存和清理缓存。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
package com.favccxx.favjcs;
import java.util.HashMap;
import java.util.Map;
import org.apache.jcs.JCS;
import org.apache.jcs.access.exception.CacheException;
import org.apache.log4j.Logger;
public class CacheFactory {
         
    private static Logger logger = Logger.getLogger(CacheFactory.class);
         
    private static Map<String, CacheWrapper> hashMapWrapper = new HashMap<String, CacheWrapper>();
         
    /**
     * 获取一个名称为cacheName的缓存对象;如果不存在,返回null
     * @param cacheName
     * @return
     */
    public static CacheWrapper getCacheWrapper(String cacheName){
        logger.debug("Get CacheWrapper, The cacheName is : " + cacheName);
        return hashMapWrapper.get(cacheName);
    }
         
    /**
     * 清理所有的缓存
     */
    public static void clearCache(){
        Object[] cacheArray = hashMapWrapper.keySet().toArray();
        for(int i=0, l=cacheArray.length; i<l; i++){
            try {
                String cacheName = cacheArray[i].toString();
                logger.debug("The cache is below to clear, And the name is : " + cacheName);
                CacheWrapper cacheWrapper = hashMapWrapper.get(cacheName);
                cacheWrapper.jcsCache.clear();
            catch (CacheException e) {
                logger.debug("Clear Cache Error!");
                e.printStackTrace();
            }
        }
    }
         
    /**
     * 获取一个名称为cacheName的缓存对象;如果不存在,则创建一个新的缓存对象
     * @param cacheName
     * @return
     */
    private static CacheWrapper createCacheWrapper(String cacheName){
        JCS cache = null;
        try{
            cache = JCS.getInstance(cacheName);
            return new CacheWrapper(cache);
        }catch(CacheException e){
            return null;
        }
    }
         
    /**
     * 创建缓存对象
     * @param cacheName
     */
    private static void createHashMapWrapper(String cacheName){
        hashMapWrapper.put(cacheName, createCacheWrapper(cacheName));
    }
         
    /**
     * 初始化缓存对象
     */
    public static void initCache(){
        logger.debug("By Start initCache Method, We create all the Cache Object");
        createHashMapWrapper("coolBoyCache");
//      createHashMapWrapper("beautifulGirl");
    }
}

5.3创建测试类TestCache,测试刚才的缓存对象。

1
2
3
4
5
6
7
8
9
10
11
package com.favccxx.favjcs.web;
import com.favccxx.favjcs.CacheFactory;
public class TestCache {
    /**
     * @param args
     */
    public static void main(String[] args) {
        CacheFactory.initCache();
        CacheFactory.getCacheWrapper("coolBoy");
    }
}

本文转自 genuinecx 51CTO博客,原文链接:http://blog.51cto.com/favccxx/1204907,如需转载请自行联系原作者

五步教你使用JCS快速搭建缓存环境相关推荐

  1. 使用JCS快速搭建缓存环境

    JCS是Jakarta的项目Turbine的子项目.它是一个复合式的缓冲工具.可以将对象缓冲到内存.硬盘.具有缓冲对象时间过期设定.还可以通过JCS构建具有缓冲的分布式构架,以实现高性能的应用.对于一 ...

  2. 怎么样用计算机打字,五步教你如何电脑快速打字!

    在所有电脑操作技能中,敲键盘看上去是最不需要学习的,其实并不是这样,敲好键盘恰好是学习电脑的一个小门槛,或者说盲打是一个小门槛,会不会盲打是有没有踏踏实实学过一段电脑的分界线,今天我来系统全面的教大家 ...

  3. centos7 如何安装部署k8s_五步教你如何使用k8s快速部署ES

    前言 今天小编打算用五步教大家如何使用k8s快速部署ES,有兴趣的小伙伴可以了解一下~ 由于是使用本地存储,所以需要先创建pv 1.创建存储类 local-elasticsearch.yaml kin ...

  4. 适合新手:手把手教你用Go快速搭建高性能、可扩展的IM系统(有源码)

    本文为开源工程:"github.com/GuoZhaoran/fastIM"的配套文章,原作者:"绘你一世倾城",现为:猎豹移动php开发工程师,感谢原作者的技 ...

  5. 手把手教你快速搭建私服环境

    手把手教你快速搭建私服环境,简单实用,一看就懂 1.准备工作:先下载Nxus Nexus 是 Maven 仓库管理器, 通过 nexus 可以搭建 maven 仓库,同时 nexus 还提供强大的仓库 ...

  6. ESP8266 Non-OS SDK 开发之旅 基础篇① 初识 Non-OS SDK,史上超级详细手把手教小白20分钟快速搭建SDK软件开发环境,完成第一个例子Hello World!

    文章目录 1.前言 2. SDK概述 2.1 SDK使用流程 2.2 ESP8266 HDK -- 硬件开发工具 2.3 ESP8266 SDK -- 软件开发工具包 2.3.1 Non-OS SDK ...

  7. win10系统更新在哪_五步教你win10永久关闭系统自动更新

    最近有很多朋友问我win10如何永久关闭自动更新,每次打开电脑都是一个大大的笑脸让我更新系统,但是又不能取消更新很是烦恼.小编五步教你永久关闭win10自动更新问题. 电脑的更新和手机的更新其实是一样 ...

  8. 乐鑫代理-启明云端分享ESP32系列教程之二:Linux搭建esp-idf环境

    提示:此教程依据乐鑫官方的ESP32入门教程总结而来,仅供个人参考学学习,如有错误,欢迎批评指正.乐鑫官方参考: 乐鑫官方文档地址 1.搭建esp-idf环境 1.1安装虚拟机与Ubuntu 未安装请 ...

  9. 如何安装python环境_python入门第一步:如何安装Python和搭建Python环境?

    原标题:python入门第一步:如何安装Python和搭建Python环境? 很多想入门Python的小伙伴,在第一步安装Python上就放弃了.从入门到放弃速度之快也是令人吃惊!今天就和大家一起从最 ...

最新文章

  1. PHP如何进阶,提升自己
  2. 在线项目管理软件leangoo 管理 技术支持
  3. Java-Web JSTL标签库、自定义标签库和MVC设计模式
  4. java控制一次传10条数据_java 定时同步数据的任务优化
  5. android的findviewbyid,Android O预览findViewById编译错误
  6. clearfix清除浮动
  7. C++ STL list的大小
  8. python如何给一组数据打标签_给数据集打标签python代码实现(1)
  9. I00012 打印三位数的水仙花数及其个数
  10. Spring IoC-02
  11. matlab有参函数,定义含参量函数 matlab
  12. java生成16位唯一性的订单号
  13. 2020数学建模国赛A题 炉温曲线 心得
  14. 富文本编辑器kindeditor支持从word复制粘贴保留格式和图片的插件
  15. Unity笔记-29-ARPG游戏项目-01-第三人称相机
  16. 教你如何写出完美的论文——5. 做笔记
  17. 红外辐射加热器的全球与中国市场2022-2028年:技术、参与者、趋势、市场规模及占有率研究报告
  18. 又一大型色情直播App被捣毁,女主播哭求别告诉家人
  19. 重磅!微丰荣获2021企业微信CRM创新服务产品奖,沃丰科技加快企业数字化进程
  20. three.js创建简单的法向贴图

热门文章

  1. UVM-1.1学习(二)——uvm_cmdline_processor
  2. 中国高频变频器及压缩机类负载应用市场发展态势及十si五战略规划建议报告2021-2027年
  3. 投名状Mtv视频在线播放
  4. 全球及中国铁路建设行业运营管理模式与未来总体规划报告2022版
  5. 94-路由协议:西出网关无故人,敢问路在何方
  6. P4391 [BOI2009]Radio Transmission 无线传输(Kmp)
  7. ​用友T+标准版如何反结账,反记账​
  8. pyecharts+flask制作数据大屏-进阶
  9. WMS仓库(仓储)管理系统解决方案
  10. 2020湖南大学考研专业课复习资料