使用JCS快速搭建緩存環境

jopen 11年前發布 | 13K 次閱讀 JCS 緩存組件

JCSJakarta的項目Turbine的子項目。它是一個復合式的緩沖工具。可以將對象緩沖到內存、硬盤。具有緩沖對象時間過期設定。還可以通過JCS構建具有緩沖的分布式構架,以實現高性能的應用。對于一些需要頻繁訪問而每訪問一次都非常消耗資源的對象,可以臨時存放在緩沖區中,這樣可以提高服務的性能。而JCS正是一個很好的緩沖工具。緩沖工具對于讀操作遠遠多于寫操作的應用性能提高非常顯著。


一、理解緩存的三個核心概念

Elements : JCS是一個對象緩存,能放置一些對象或是”elements”并通過key來訪問它們,很像一個hashtable。可以想象JCS是一個能過Name來獲取的hashtables的集合。

Regions : 每一個hashtables都被稱做“region”,每一個region都能被獨立于其他regions配置。例如,可以有一個稱做城市的region,緩存了一些定期被改變的城市對象。可以定義一個region被叫做產品,緩存一些定期改變的產品數據。將可以配置易變的產品的regionelements 過期時間要快于cityregion

Auxiliaries : Auxiliariesregion能用的插件選項。核心的AuxiliariesIndexedDisk CacheTCPLateral CacheRemoteCache Server。例如,磁盤緩存允許當內存達到閾值后把緩存對象交換到硬上。


二、下載JCS

可以從JCS官網下載JCS,可以查看JCS相關的文檔。


三、獲取JCS依賴的Jar

JCS必備的Jar有兩個,分別是jcs-1.3.jarconcurrent.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

</td> </tr> </tbody> </table>

這里需要注意的是,等號“=”之后不要留空格,否則cache.ccf不會識別。


五、開始使用JCS編程

5.1創建CacheWrapper類,使用其添加對象、獲取對象和移除對象。

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類,使用工廠管理緩存對象,用以初始化緩存和清理緩存。

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,測試剛才的緩存對象。

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");
    }
}


 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!
  • sesese色