Jason ---分享,共同进步

激情成就梦想,努力创造未来
随笔 - 53, 文章 - 1, 评论 - 45, 引用 - 0
数据加载中……

Ehcache缓存配置

近期项目用到Ehcache,以前项目主要用到Oscache,并且缓存也是针对orm来处理,只要配置就好,不需要自定义缓存,不需管理缓存。下面描述一下,Spring+Ehcache来处理缓存。

1,首先引入jar包就不说了环境也不说了,要引入ehcache.xml文件(ehcache配置文件)。

Xml代码 复制代码
  1. <ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
  2.          xsi:noNamespaceSchemaLocation="ehcache.xsd">  
  3.   
  4.       <diskStore path="java.io.tmpdir"/>  
  5.   
  6.       <cacheManagerEventListenerFactory class="" properties=""/>  
  7.   
  8.   
  9.     <cacheManagerPeerListenerFactory  
  10.             class="net.sf.ehcache.distribution.RMICacheManagerPeerListenerFactory"/>  
  11.   
  12.   
  13.      <defaultCache  
  14.             maxElementsInMemory="10000"  
  15.             eternal="false"  
  16.             timeToIdleSeconds="120"  
  17.             timeToLiveSeconds="120"  
  18.             overflowToDisk="true"  
  19.             diskSpoolBufferSizeMB="30"  
  20.             maxElementsOnDisk="10000000"  
  21.             diskPersistent="false"  
  22.             diskExpiryThreadIntervalSeconds="120"  
  23.             memoryStoreEvictionPolicy="LRU"  
  24.             />  
  25.        
  26.     <Cache  name="InstantCache"  
  27.             maxElementsInMemory="100000"  
  28.             eternal="false"  
  29.             timeToIdleSeconds="120"  
  30.             timeToLiveSeconds="300"  
  31.             overflowToDisk="true"  
  32.             diskSpoolBufferSizeMB="30"  
  33.             maxElementsOnDisk="10000000"  
  34.             diskPersistent="false"  
  35.             diskExpiryThreadIntervalSeconds="120"  
  36.             memoryStoreEvictionPolicy="LRU"  
  37.             />    
  38.     <Cache  name="fixCache"  
  39.             maxElementsInMemory="100000"  
  40.             eternal="true"  
  41.             timeToIdleSeconds="120"  
  42.             timeToLiveSeconds="120"  
  43.             overflowToDisk="false"  
  44.             diskSpoolBufferSizeMB="30"  
  45.             maxElementsOnDisk="10000000"  
  46.             diskPersistent="false"  
  47.             diskExpiryThreadIntervalSeconds="120"  
  48.             memoryStoreEvictionPolicy="LRU"  
  49.             />            
  50.     <Cache  name="methodCache"  
  51.             maxElementsInMemory="100000"  
  52.             eternal="false"  
  53.             timeToIdleSeconds="300000"  
  54.             timeToLiveSeconds="600000"  
  55.             overflowToDisk="true"  
  56.             diskSpoolBufferSizeMB="30"  
  57.             maxElementsOnDisk="10000000"  
  58.             diskPersistent="false"  
  59.             diskExpiryThreadIntervalSeconds="120"  
  60.             memoryStoreEvictionPolicy="LRU"  
  61.             />  
  62.        
  63.   
  64.   
  65. </ehcache>  
  66.    

 2,自定义Ehcache配置文件ehcache-cfg.xml

Xml代码 复制代码
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN"   
  3.     "http://www.springframework.org/dtd/spring-beans.dtd">  
  4. <beans>  
  5.     <!-- 引用ehCache的配置 -->  
  6.     <bean id="cacheManager" class="org.springframework.cache.ehcache.EhCacheManagerFactoryBean">  
  7.         <property name="configLocation">  
  8.             <value>/WEB-INF/ehcache.xml</value>  
  9.         </property>  
  10.     </bean>  
  11.   
  12.     <!-- 配置即时缓存 Start-->  
  13.     <bean id="instantCache" class="org.springframework.cache.ehcache.EhCacheFactoryBean">  
  14.         <property name="cacheManager">  
  15.             <ref local="cacheManager" />  
  16.         </property>  
  17.         <property name="cacheName">  
  18.             <value>instantCache</value>  
  19.         </property>  
  20.     </bean>  
  21.     <!-- 配置即时缓存 End-->  
  22.   
  23.     <!-- 配置固定缓存 Start-->  
  24.     <bean id="fixCache" class="org.springframework.cache.ehcache.EhCacheFactoryBean">  
  25.         <property name="cacheManager">  
  26.             <ref local="cacheManager" />  
  27.         </property>  
  28.         <property name="cacheName">  
  29.             <value>fixCache</value>  
  30.         </property>  
  31.     </bean>  
  32.     <bean id="fixCacheInterceptor" class="<SPAN style="COLOR: #000000">FixCacheInterceptor</SPAN>"></bean>  <SPAN style="COLOR: #ff0000"> <!--红色字为自定类--></SPAN>  
  33.     <bean id="fixCacheAfterAdvice" class="<SPAN style="COLOR: #000000">FixCacheAfterAdvice</SPAN>"></bean><SPAN style="COLOR: #ff0000"> <!--红色字为自定类--></SPAN>  
  34.   
  35.     <bean id="fixCachePointCut" class="org.springframework.aop.support.RegexpMethodPointcutAdvisor">  
  36.         <property name="advice">  
  37.             <ref local="fixCacheInterceptor" />  
  38.         </property>  
  39.         <property name="patterns">  
  40.             <list><!-- 不能为空,不然SpringHelper会报拿不到bean的错 -->  
  41.                 <value>.*findAllConfig.*</value>  
  42.                 <value>.*getConfig.*</value>  
  43.                 <value>.*queryConfig.*</value>  
  44.                 <value>.*listConfig.*</value>  
  45.                 <value>.*searchConfig.*</value>  
  46.                 <value>.*loadConfig.*</value>  
  47.                 </list>  
  48.         </property>  
  49.     </bean>  
  50.     <bean id="fixCachePointCutAdivsor" class="org.springframework.aop.support.RegexpMethodPointcutAdvisor">  
  51.         <property name="advice">  
  52.             <ref local="fixCacheAfterAdvice" />  
  53.         </property>  
  54.         <property name="patterns">  
  55.             <list>  
  56.                 <value>.*createConfig.*</value>  
  57.                 <!--value>.*saveConfig.*</value-->  
  58.                 <!--value>.*addConfig.*</value-->  
  59.                 <!--value>.*updateConfig.*</value-->  
  60.                 <!--value>.*delConfig.*</value>  
  61.                 <value>.*deleteConfig.*</value>  
  62.                 <value>.*modConfig.*</value-->  
  63.                 <value>.*freeConfig.*</value>  
  64.                 <value>.*bindConfig.*</value>  
  65.             </list>  
  66.         </property>  
  67.     </bean>  
  68.     <!-- 配置固定缓存 End-->  
  69.   
  70.     <!-- 配置接口缓存 Start-->  
  71.     <bean id="methodCache" class="org.springframework.cache.ehcache.EhCacheFactoryBean">  
  72.         <property name="cacheManager">  
  73.             <ref local="cacheManager" />  
  74.         </property>  
  75.         <property name="cacheName">  
  76.             <value>methodCache</value>  
  77.         </property>  
  78.     </bean>  
  79.     <!-- find/create cache拦截器 excludeMethods 过滤的方法-->  
  80.     <bean id="methodCacheInterceptor" class="<SPAN style="COLOR: #000000">MethodCacheInterceptor</SPAN>">  
  81.         <property name="excludeMethods">  
  82.             <value>  
  83.                 deleteConfig,findConfig   
  84.             </value>  
  85.         </property>  
  86.     </bean>  
  87.     <!-- flush cache拦截器 excludeMethods 过滤的方法-->  
  88.     <bean id="methodCacheAfterAdvice" class="<SPAN style="COLOR: #000000">MethodCacheAfterAdvice</SPAN>">  
  89.         <property name="excludeMethods">  
  90.             <value>  
  91.                 deleteConfig,findConfig   
  92.             </value>  
  93.         </property>  
  94.     </bean>  
  95.     <bean id="methodCachePointCut" class="org.springframework.aop.support.RegexpMethodPointcutAdvisor">  
  96.         <property name="advice">  
  97.             <ref local="methodCacheInterceptor" />  
  98.         </property>  
  99.         <property name="patterns">  
  100.             <list>  
  101.                 <value>.*find.*</value>  
  102.                 <value>.*get.*</value>  
  103.                 <value>.*query.*</value>  
  104.                 <value>.*list.*</value>  
  105.                 <value>.*search.*</value>  
  106.                 <value>.*load.*</value>  
  107.             </list>  
  108.         </property>  
  109.     </bean>  
  110.     <bean id="methodCachePointCutAdvice" class="org.springframework.aop.support.RegexpMethodPointcutAdvisor">  
  111.         <property name="advice">  
  112.             <ref local="methodCacheAfterAdvice" />  
  113.         </property>  
  114.         <property name="patterns">  
  115.             <list>  
  116.                 <value>.*create.*</value>  
  117.                 <value>.*save.*</value>  
  118.                 <value>.*add.*</value>  
  119.                 <value>.*update.*</value>  
  120.                 <value>.*del.*</value>  
  121.                 <value>.*delete.*</value>  
  122.                 <value>.*mod.*</value>  
  123.                 <value>.*free.*</value>  
  124.                 <value>.*bind.*</value>  
  125.             </list>  
  126.         </property>  
  127.     </bean>  
  128.     <bean class="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator">  
  129.         <property name="proxyTargetClass">  
  130.             <value>false</value>  
  131.         </property>  
  132.         <property name="beanNames">  
  133.             <list>  
  134.                 <value>*BO</value>  
  135.             </list>  
  136.         </property>  
  137.         <property name="interceptorNames">  
  138.             <list>  
  139.                 <value>fixCachePointCut</value>  
  140.                 <value>fixCachePointCutAdivsor</value>  
  141.                 <value>methodCachePointCut</value>  
  142.                 <value>methodCachePointCutAdvice</value>  
  143.             </list>  
  144.         </property>  
  145.     </bean>  
  146.     <!-- 配置接口缓存 End -->  
  147.   
  148.     <!-- 刷新固定缓存定时器 Start-->  
  149.     <bean id="FixJobDetail" class="org.springframework.scheduling.quartz.JobDetailBean">  
  150.         <property name="jobClass">  
  151.             <value>com.ot.opf.timer.FixCacheJob</value>  
  152.         </property>  
  153.     </bean>  
  154.     <bean id="FixCacheTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean">  
  155.         <property name="jobDetail" ref="FixJobDetail" />  
  156.         <property name="cronExpression">  
  157.             <value>0 0 2 * * ?</value>  
  158.         </property>  
  159.     </bean>  
  160.     <bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean">  
  161.         <property name="triggers">  
  162.            <list><ref bean="FixCacheTrigger"/></list>  
  163.         </property>  
  164.     </bean>  
  165.     <!-- 刷新固定缓存定时器 End -->  
  166. </beans>  

 3,增加相应缓存的管理类

(1)FixEhCacheManager

Java代码 复制代码
  1. import java.util.List;   
  2.   
  3. import net.sf.ehcache.Cache;   
  4. import net.sf.ehcache.Element;   
  5.   
  6. import org.apache.log4j.Logger;   
  7.   
  8.   
  9.   
  10. public class FixEhCacheManager {   
  11.     private static Cache fixCache = (Cache)SpringHelper.getBean("fixCache");   
  12.     private static Logger logger = Logger.getLogger(FixEhCacheManager.class);   
  13.   
  14.     private static boolean isStop = true;//初始化暂停   
  15.   
  16.     public synchronized static boolean isStop() {   
  17.         return isStop;   
  18.     }   
  19.   
  20.     public synchronized static void setStop(boolean isStop) {   
  21.         FixEhCacheManager.isStop = isStop;   
  22.     }   
  23.   
  24.     public synchronized static void put(Object key,Object value){   
  25.         if(!isStop()){   
  26.             Element e = new Element(key,value);   
  27.             logger.debug("cache object to fixCache... key:"+key+",size of value"+e.getSerializedSize());   
  28.             fixCache.put(e);   
  29.         }   
  30.     }   
  31.   
  32.     public synchronized static Object get(Object key){   
  33.         if(isStop())return null;   
  34.         Element element = fixCache.get(key);   
  35.         if(element!=null)logger.debug("get object from fixCache... key:"+key);   
  36.         return element == null ? null : element.getObjectValue();   
  37.     }   
  38.   
  39.     public synchronized static void remove(Object key){   
  40.         logger.debug("remove object from fixCache... key:"+key);   
  41.         fixCache.remove(key);   
  42.     }   
  43.   
  44.     public synchronized static void removeAll(){   
  45.         logger.debug("remove all object from fixCache");   
  46.         fixCache.removeAll();   
  47.     }   
  48.   
  49.     public synchronized static List getKeys(){   
  50.         return fixCache.getKeys();   
  51.     }   
  52.   
  53.     public synchronized static int getSize(){   
  54.         return fixCache.getSize();   
  55.     }   
  56.   
  57.     public synchronized static String getCacheName(){   
  58.         return fixCache.getName();   
  59.     }   
  60.   
  61.     public synchronized static String getCacheKey(Class _class, String methodName, Object... arguments) {   
  62.         StringBuffer sb = new StringBuffer("fixCache_");   
  63.         sb.append(_class.getName()).append(".").append(methodName);   
  64.         if ((arguments != null) && (arguments.length != 0)) {   
  65.             for (int i = 0; i < arguments.length; i++) {   
  66.                 sb.append(".").append(arguments[i]);   
  67.             }   
  68.         }   
  69.         return sb.toString();   
  70.     }   
  71. }  

 (2)InstantEhCacheManager

Java代码 复制代码
  1. import java.util.List;   
  2.   
  3. import net.sf.ehcache.Cache;   
  4. import net.sf.ehcache.Element;   
  5.   
  6. import org.apache.log4j.Logger;   
  7.   
  8.   
  9.   
  10.   
  11. public class InstantEhCacheManager {   
  12.     private static Cache instantCache = (Cache)SpringHelper.getBean("instantCache");   
  13.     private static Logger logger = Logger.getLogger(InstantEhCacheManager.class);   
  14.   
  15.     private static boolean isStop = true;//初始化停止   
  16.   
  17.     public synchronized static boolean isStop() {   
  18.         return isStop;   
  19.     }   
  20.   
  21.     public synchronized static void setStop(boolean isStop) {   
  22.         InstantEhCacheManager.isStop = isStop;   
  23.     }   
  24.   
  25.     public synchronized static void put(Object key,Object value){   
  26.         if(!isStop()){   
  27.             Element e = new Element(key,value);   
  28.             logger.debug("cache object to instantCache... key:"+key+",size of value��"+e.getSerializedSize());   
  29.             instantCache.put(e);   
  30.         }   
  31.     }   
  32.   
  33.     public synchronized static Object get(Object key){   
  34.         if(isStop())return null;   
  35.         Element element = instantCache.get(key);   
  36.         if(element!=null)logger.debug("get object from instantCache... key:"+key);   
  37.         return element == null ? null : element.getObjectValue();   
  38.     }   
  39.   
  40.     public synchronized static void remove(Object key){   
  41.         logger.debug("remove object from instantCache... key:"+key);   
  42.         instantCache.remove(key);   
  43.     }   
  44.   
  45.     public synchronized static void removeAll(){   
  46.         logger.debug("remove all object from instantCache");   
  47.         instantCache.removeAll();   
  48.     }   
  49.   
  50.     public synchronized static List getKeys(){   
  51.         return instantCache.getKeys();   
  52.     }   
  53.   
  54.     public synchronized static int getSize(){   
  55.         return instantCache.getSize();   
  56.     }   
  57.   
  58.     public synchronized static String getCacheName(){   
  59.         return instantCache.getName();   
  60.     }   
  61.   
  62.     public synchronized static String getCacheKey(Class _class, String methodName, Object... arguments) {   
  63.         StringBuffer sb = new StringBuffer("instantCache_");   
  64.         sb.append(_class.getName()).append(".").append(methodName);   
  65.         if ((arguments != null) && (arguments.length != 0)) {   
  66.             for (int i = 0; i < arguments.length; i++) {   
  67.                 sb.append(".").append(arguments[i]);   
  68.             }   
  69.         }   
  70.         return sb.toString();   
  71.     }   
  72. }  

 

(3)MethodEhCacheManager

Java代码 复制代码
  1. import java.util.List;   
  2.   
  3. import net.sf.ehcache.Cache;   
  4. import net.sf.ehcache.Element;   
  5.   
  6. import org.apache.log4j.Logger;   
  7.   
  8.   
  9.   
  10. public class MethodEhCacheManager {   
  11.     private static Cache methodCache = (Cache)SpringHelper.getBean("methodCache");   
  12.     private static Logger logger = Logger.getLogger(MethodEhCacheManager.class);   
  13.   
  14.     private static boolean isStop = true;//初始化暂停   
  15.   
  16.     public synchronized static boolean isStop() {   
  17.         return isStop;   
  18.     }   
  19.   
  20.     public synchronized static void setStop(boolean isStop) {   
  21.         MethodEhCacheManager.isStop = isStop;   
  22.     }   
  23.   
  24.     public synchronized static void put(Object key,Object value){   
  25.         if(!isStop()){   
  26.             Element e = new Element(key,value);   
  27.             logger.debug("cache object to methodCache ... key:"+key+",size of value��"+e.getSerializedSize());   
  28.             methodCache.put(e);   
  29.         }   
  30.     }   
  31.   
  32.     public synchronized static Object get(Object key){   
  33.         if(isStop())return null;   
  34.         Element element = methodCache.get(key);   
  35.         if(element!=null)logger.debug("get object from methodCache... key:"+key);   
  36.         return element == null ? null : element.getObjectValue();   
  37.     }   
  38.   
  39.     public synchronized static void remove(Object key){   
  40.         logger.debug("remove object from methodCache... key:"+key);   
  41.         methodCache.remove(key);   
  42.     }   
  43.   
  44.     public synchronized static void removeAll(){   
  45.         logger.debug("remove all object from methodCache");   
  46.         methodCache.removeAll();   
  47.     }   
  48.   
  49.     public synchronized static List getKeys(){   
  50.         return methodCache.getKeys();   
  51.     }   
  52.   
  53.     public synchronized static int getSize(){   
  54.         return methodCache.getSize();   
  55.     }   
  56.   
  57.     public synchronized static String getCacheName(){   
  58.         return methodCache.getName();   
  59.     }   
  60.   
  61.     public synchronized static String getCacheKey(Class _class, String methodName, Object... arguments) {   
  62.         StringBuffer sb = new StringBuffer("methodCache_");   
  63.         sb.append(_class.getName()).append(".").append(methodName);   
  64.         if ((arguments != null) && (arguments.length != 0)) {   
  65.             for (int i = 0; i < arguments.length; i++) {   
  66.                 sb.append(".").append(arguments[i]);   
  67.             }   
  68.         }   
  69.         return sb.toString();   
  70.     }   
  71.   
  72. }  

 

4,aop相应的类,只要对上面的通过BeanName捕获到,执行相应的AOP处理相应的缓存放入和移出。

posted on 2010-12-04 11:46 agun 阅读(2845) 评论(0)  编辑  收藏 所属分类: java web架构设计与系统分析


只有注册用户登录后才能发表评论。


网站导航: