使用java5的注解和Sping/AspectJ的AOP 来实现Memcached的缓存

来源:互联网 发布:深圳垦鑫达对员工知乎 编辑:程序博客网 时间:2024/05/22 03:14
使用java5的注解和Sping/AspectJ的AOP 来实现Memcached的缓存今天要介绍的是Simple-Spring-Memcached,它封装了对MemCached的调用,使MemCached的客户端开发变得超乎寻常的简单,只要一行代码就行:@ReadThroughAssignCache(assignedKey = "VETS", expiration = 300, namespace = "NELZ")是不是很神奇?这行代码指定了MemCached的key,过期时间和命名空间。假设你的MemCached服务器IP是:196.168.10.101,端口是:12000,那么在数据调用的配置文件中只要加上下面配置代码就可以了:  1 <import resource="classpath:simplesm-context.xml" /> 5   <bean id="memcachedConnectionBean" class="net.nelz.simplesm.config.MemcachedConnectionBean"> 7     <property name="consistentHashing" value="true" /> 9     <property name="nodeList" value="196.168.10.101:12000" /> 5   </bean>  从simplesm-context.xml的内容中,可以看出它所封装的类和方法:   1   <bean id="memcachedClientFactory" class="net.nelz.simplesm.config.MemcachedClientFactory" >  3     property name="bean" ref="memcachedConnectionBean" />  5   </bean>  9   <bean id="memcachedClient" factory-bean="memcachedClientFactory" factory-method="createMemcachedClient" /> 13    <bean id="methodStore" class="net.nelz.simplesm.aop.CacheKeyMethodStoreImpl" /> 17   <bean id="net.nelz.simplesm.DefaultKeyProvider" class="net.nelz.simplesm.impl.DefaultKeyProvider"> 19     <property name="methodStore" ref="methodStore" /> 21   </bean> 25   <bean id="readThroughSingleCache" class="net.nelz.simplesm.aop.ReadThroughSingleCacheAdvice"> 27     <property name="cache" ref="memcachedClient" /> 29     <property name="methodStore" ref="methodStore" /> 31     <property name="defaultKeyProvider" ref="net.nelz.simplesm.DefaultKeyProvider" /> 33   </bean> 35   <bean id="readThroughMultiCache" class="net.nelz.simplesm.aop.ReadThroughMultiCacheAdvice"> 37     <property name="cache" ref="memcachedClient" /> 39     <property name="methodStore" ref="methodStore" /> 41     <property name="defaultKeyProvider" ref="net.nelz.simplesm.DefaultKeyProvider" /> 43   </bean> 45   <bean id="readThroughAssignCache" class="net.nelz.simplesm.aop.ReadThroughAssignCacheAdvice"> 47     <property name="cache" ref="memcachedClient" /> 49     <property name="methodStore" ref="methodStore" /> 51     <property name="defaultKeyProvider" ref="net.nelz.simplesm.DefaultKeyProvider" /> 53   </bean> 54  55   <bean id="updateSingleCache" class="net.nelz.simplesm.aop.UpdateSingleCacheAdvice"> 57     <property name="cache" ref="memcachedClient" /> 59     <property name="methodStore" ref="methodStore" /> 61     <property name="defaultKeyProvider" ref="net.nelz.simplesm.DefaultKeyProvider" /> 63   </bean> 64  65   <bean id="updateMultiCache" class="net.nelz.simplesm.aop.UpdateMultiCacheAdvice"> 67     <property name="cache" ref="memcachedClient" /> 69     <property name="methodStore" ref="methodStore" /> 71     <property name="defaultKeyProvider" ref="net.nelz.simplesm.DefaultKeyProvider" /> 73   </bean> 75   <bean id="updateAssignCache" class="net.nelz.simplesm.aop.UpdateAssignCacheAdvice"> 77     <property name="cache" ref="memcachedClient" /> 79     <property name="methodStore" ref="methodStore" /> 81     <property name="defaultKeyProvider" ref="net.nelz.simplesm.DefaultKeyProvider" /> 83   </bean> 85   <bean id="invalidateSingleCache" class="net.nelz.simplesm.aop.InvalidateSingleCacheAdvice"> 87     <property name="cache" ref="memcachedClient" /> 89     <property name="methodStore" ref="methodStore" /> 91     <property name="defaultKeyProvider" ref="net.nelz.simplesm.DefaultKeyProvider" /> 93   </bean> 95   <bean id="invalidateMultiCache" class="net.nelz.simplesm.aop.InvalidateMultiCacheAdvice"> 97     <property name="cache" ref="memcachedClient" /> 99     <property name="methodStore" ref="methodStore" />101     <property name="defaultKeyProvider" ref="net.nelz.simplesm.DefaultKeyProvider" />103   </bean>105   <bean id="invalidateAssignCache" class="net.nelz.simplesm.aop.InvalidateAssignCacheAdvice">107     <property name="cache" ref="memcachedClient" />109     <property name="methodStore" ref="methodStore" />111     <property name="defaultKeyProvider" ref="net.nelz.simplesm.DefaultKeyProvider" />113   </bean> Simple-Spring-Memcached还提供了一个例子,在spring的petClinic例子中加入了几行代码,就实现了对MemCached的调用:  1 import net.nelz.simplesm.annotations.ReadThroughAssignCache; 2  3 import net.nelz.simplesm.annotations.ReadThroughSingleCache; 4  5 @ReadThroughAssignCache(assignedKey = "VETS", expiration = 300, namespace = "NELZ") 6  7     public Collection<Vet> getVets() { 8  9         System.out.println("\n ! ! !Gonna wait a bit: " + new Date() + "\n");        10 11         try {12 13             Thread.sleep(4000);14 15         } catch (Exception ex) {}16 17         return sessionFactory.getCurrentSession().createQuery("from Vet vet order by vet.lastName, vet.firstName").list();18 19          }  为了加强测试的效果,在第一次读取数据时,故意停顿了一下(sleep)。
转载自:
http://www.blogjava.net/hao446tian/archive/2012/04/10/373725.html

 

0 0
原创粉丝点击