当前位置: 首页 > 工具软件 > JCS > 使用案例 >

使用JCS快速搭建缓存环境

黄景胜
2023-12-01

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

缓存技术学习 https://www.itkc8.com   

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

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类,使用其添加对象、获取对象和移除对象。

 

[java] view plaincopyprint?

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

 

 

 

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

 

[java] view plaincopyprint?

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

 

 

 

 

 

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

 

[java] view plaincopyprint?

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

缓存技术学习 https://www.itkc8.com 

 类似资料: