• 浅谈我对JCS 的理解


    JCS 是Java 中缓存的一种实现,支持将数据缓存到内存和硬盘中,支持设置缓存对象的有效时长。

    我认为可以这么理解JCS:客户端向服务器发出请求,服务器就先去缓存中查一下有没有客户端请求的数据,有则直接使用;没有则服务器去连接数据库查询数据,然后将数据传给用户的同时也存到缓存中,供下一次使用。若是缓存满了就根据所设置的调度算法(如:最近最少算法)去删除缓存中的对象,若是缓存中的对象过了有效时长,也将被删除。

    JCS 在项目中的实现

    1、所需要使用到的架包如下:

    commons-collections-3.2.jar
    commons-lang-2.5.jar
    commons-logging-1.1.1.jar
    concurrent-1.3.4.jar
    jcs-1.2.7.9.jar

    2、JCS 配置文件

    配置JCS 就是简单地创建和填充一个cache.ccf 文件,这个文件定义缓存应该使用哪些区域,以及这些区域的属性或选项。根据应用程序的需求,配置这个文件可以快速扩展缓存。在JCS的配置文件中(WEB-INF/classes/cache.ccf),有一个默认配置(default),也可以对每个缓冲区(region)单独配置,没有单独配置特性的缓冲区将使用默认的配置

    例如cache.ccf

    # optional region "testCache1" specific configuration settings
    jcs.region.testCache1=
    jcs.region.testCache1.cacheattributes=org.apache.jcs.engine.CompositeCacheAttributes
    jcs.region.testCache1.cacheattributes.MaxObjects=1000
    jcs.region.testCache1.cacheattributes.MemoryCacheName=org.apache.jcs.engine.memory.lru.LRUMemoryCache
    jcs.region.testCache1.cacheattributes.UseMemoryShrinker=false
    jcs.region.testCache1.elementattributes.IsEternal=false
    jcs.region.testCache1.elementattributes.MaxLifeSeconds=180
    jcs.region.testCache1.elementattributes.IsSpool=false
    jcs.region.testCache1.elementattributes.IsLateral=false
    jcs.region.testCache1.elementattributes.IsRemote=false


    3、JCS 的实现

    可以将JCS当做是一个特殊的Map来理解,其赋值、取值、移除值的方式均与Map相同。

    import org.apache.jcs.JCS;
    import org.apache.jcs.access.exception.CacheException;
    public class CacheManage
    {
          public static void main(String[] args)
          {
                JCS cache=null;
                try
                {
                      cache = JCS.getInstance("testCache1");
                      String key = "test";
                      String value = "abcd";
                      for(int i =0; i<1000;i++)
                      {
                            cache.put(key+i, value+i);
                      }
                }
                catch (CacheException e)
                {
                      // TODO Auto-generated catch block
                      e.printStackTrace();
                }
                System.out.println("test100:"+cache.get("test100"));
                System.out.println("test300:"+cache.get("test300"));
                System.out.println("test1000:"+cache.get("test1000"));
          }
    }

    从上述实现的例子中,我们可以看出,使用JCS.getInstance()取的一个在cache.ccf 定义过得缓存域即可使用该缓存了。在多个类中是会共享缓存中的数据的。

  • 相关阅读:
    4819: [Sdoi2017]新生舞会 分数规划
    [Sdoi2017]序列计数 矩阵优化dp
    SDOI2017相关分析 线段树
    loj SDOI2017数字表格
    bzoj 2527: [Poi2011]Meteors
    BZOJ2440: [中山市选2011]完全平方数
    GCD与莫比乌斯反演的勾当
    2870: 最长道路tree
    bzoj2152: 聪聪可可 点分治
    3545: [ONTAK2010]Peaks 平衡树,最小生成树
  • 原文地址:https://www.cnblogs.com/panie2015/p/4329853.html
Copyright © 2020-2023  润新知