EhCache运用

来源:互联网 发布:开源电商平台php 编辑:程序博客网 时间:2024/06/06 04:27


官方网站:http://ehcache.sourceforge.net/

Cache存储方式:内存或磁盘。

 

 

 

 

SpringMVC POM文件

      <ehcache.version>2.6.9</ehcache.version>

      <ehcache-web.version>2.0.4</ehcache-web.version>

 

      <dependency>

          <groupId>net.sf.ehcache</groupId>

          <artifactId>ehcache-core</artifactId>

          <version>${ehcache.version}</version>

      </dependency>

      <dependency>

          <groupId>net.sf.ehcache</groupId> 

          <artifactId>ehcache-web</artifactId> 

          <version>${ehcache-web.version}</version>

      </dependency>

     

具体哪些包搞不清了(我想应该只需要上面吧),可能还需要日志包

      <dependency>

          <groupId>org.slf4j</groupId>

          <artifactId>slf4j-api</artifactId>

          <version>${slf4j.version}</version>

      </dependency>

 

      <dependency>

          <groupId>org.slf4j</groupId>

          <artifactId>slf4j-log4j12</artifactId>

          <version>${slf4j.version}</version>

      </dependency>

 

Cache属性的配置文件(ehcache-local.xml

<?xmlversion="1.0"encoding="UTF-8"?>

<ehcacheupdateCheck="false"name="defaultCache">

          

     <cacheManagerPeerProviderFactoryclass="net.sf.ehcache.distribution.RMICacheManagerPeerProviderFactory"

          properties="peerDiscovery=automatic,multicastGroupAddress=230.0.0.1,multicastGroupPort=4446"/>

     <cacheManagerPeerListenerFactoryclass="net.sf.ehcache.distribution.RMICacheManagerPeerListenerFactory"/>

 

     <diskStorepath="../temp/jeesite/ehcache"/>

 

     <!--默认缓存配置. -->

     <defaultCachemaxEntriesLocalHeap="100"eternal="false"overflowToDisk="true"

           maxEntriesLocalDisk="100000"timeToIdleSeconds="5"timeToLiveSeconds="5">

          <cacheEventListenerFactoryclass="net.sf.ehcache.distribution.RMICacheReplicatorFactory"

                properties="replicatePuts=false,replicateUpdatesViaCopy=false"/>

     </defaultCache>

     

   <!--系统缓存(黄色字体是设置缓存不用的实效时间,和缓存的有效时间 -->

   <cachename="sysCache"maxEntriesLocalHeap="100"eternal="false"overflowToDisk="true"

      timeToIdleSeconds="500"timeToLiveSeconds="500"

      timeToIdleSeconds="5"timeToLiveSeconds="5">

      <cacheEventListenerFactoryclass="net.sf.ehcache.distribution.RMICacheReplicatorFactory"/>

   </cache>

     

     <!--用户缓存 -->

     <cachename="userCache"maxEntriesLocalHeap="100"eternal="false"overflowToDisk="true"

          timeToIdleSeconds="5"timeToLiveSeconds="5">

          <cacheEventListenerFactoryclass="net.sf.ehcache.distribution.RMICacheReplicatorFactory"/>

     </cache>

     

     <!--工作流模块缓存 -->

     <cachename="actCache"maxEntriesLocalHeap="100"eternal="false"overflowToDisk="true">

          <cacheEventListenerFactoryclass="net.sf.ehcache.distribution.RMICacheReplicatorFactory"/>

     </cache>

     

     <!--系统活动会话缓存 -->

     <cachename="activeSessionsCache"maxEntriesLocalHeap="10000"overflowToDisk="true"

                eternal="false"timeToLiveSeconds="0"timeToIdleSeconds="0"

                diskPersistent="true"diskExpiryThreadIntervalSeconds="600">

          <cacheEventListenerFactoryclass="net.sf.ehcache.distribution.RMICacheReplicatorFactory"

                properties="replicateAsynchronously=true,replicatePuts=true, replicateUpdates=true,

                     replicateUpdatesViaCopy=false,replicateRemovals=true "/>

     </cache>

</ehcache>

 

 

 

 

 

 

 

结构图:

 

 

 

CacheUtils的公用方法:

import java.net.URL;

 

importnet.sf.ehcache.Cache;

importnet.sf.ehcache.CacheManager;

importnet.sf.ehcache.Element;

 

/**

 * Cache工具类

 *@version 2013-5-29

 */

publicclass EhcacheUtil {

 

   privatestaticfinal Stringpath ="/cache/ehcache-local.xml";

 

   privatestatic CacheManagercacheManager;

   privatestaticfinal StringSYS_CACHE ="sysCache";

 

   

   privatestaticCacheManager getCacheManager(){

       //创建一个缓存管理器

       if(cacheManager == null){

       URL url =EhcacheUtil.class.getResource(path);

       cacheManager =CacheManager.create(url);

       }

       returncacheManager;

   }

   /**

    * 获取SYS_CACHE缓存

    * @param key

    * @return

    */

   publicstatic Object get(Stringkey) {

       returnget(SYS_CACHE,key);

   }

   

   /**

    * 写入SYS_CACHE缓存

    * @param key

    * @return

    */

   publicstaticvoid put(Stringkey, Objectvalue) {

       put(SYS_CACHE,key,value);

   }

   

   /**

    * SYS_CACHE缓存中移除

    * @param key

    * @return

    */

   publicstaticvoid remove(Stringkey) {

       remove(SYS_CACHE,key);

   }

   

   /**

    * 获取缓存

    * @param cacheName

    * @param key

    * @return

    */

   publicstatic Object get(StringcacheName, Stringkey) {

       Element element =getCache(cacheName).get(key);

       returnelement==null?null:element.getObjectValue();

   }

 

   /**

    * 写入缓存

    * @param cacheName

    * @param key

    * @param value

    */

   publicstaticvoid put(StringcacheName, Stringkey, Objectvalue) {

       Element element =new Element(key,value);

       getCache(cacheName).put(element);

   }

 

   /**

    * 从缓存中移除

    * @param cacheName

    * @param key

    */

   publicstaticvoid remove(StringcacheName, Stringkey) {

       getCache(cacheName).remove(key);

   }

   

   /**

    * 获得一个Cache,没有则创建一个。

    * @param cacheName

    * @return

    */

   privatestatic Cache getCache(StringcacheName){

       cacheManager =getCacheManager();

       Cache cache =cacheManager.getCache(cacheName);

       if (cache == null){

           cacheManager.addCache(cacheName);

           cache =cacheManager.getCache(cacheName);

           cache.getCacheConfiguration().setEternal(true);

       }

       returncache;

   }

   

}

 

 

 

顺便说下:EhcacheUtil.class.getResource("/")目录为:

 

 

Cache调用:

EhcacheUtil.put(Constants.SYSCACHE,key,value);

     

ObjectcacheObj = EhcacheUtil.get(Constants.SYSCACHE,key);

0 0
原创粉丝点击