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


    使用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
    
    
  • 相关阅读:
    LeetCode: Tags-[Array], Difficulty-[Medium]
    J2SE 常用方法
    LeetCode: Tags-[Array], Difficulty-[Easy]
    Java Code Style 记录
    LintCode 1-30;
    Android在线程中发送GET和POST请求 在主线程更新UI
    Android中intent启动Activity中intent.setFlags()的作用
    源码备份 listview
    android数据库操作
    android 验证二
  • 原文地址:https://www.cnblogs.com/weiguo21/p/3123445.html
Copyright © 2020-2023  润新知