Spring Cache注解+Memcached
jopen
10年前
Spring3.1 Cache注解
依赖jar包:
<!-- simple-spring-memcached --> <dependency> <groupId>com.google.code.simple-spring-memcached</groupId> <artifactId>simple-spring-memcached</artifactId> <version>3.5.0</version> </dependency> <dependency> <groupId>com.google.code.simple-spring-memcached</groupId> <artifactId>xmemcached-provider</artifactId> <version>3.5.0</version> </dependency> <dependency> <groupId>com.googlecode.xmemcached</groupId> <artifactId>xmemcached</artifactId> <version>2.0.0</version> </dependency>
applicationContext-cache-memcached.xml
<!-- 启用缓存注解功能,这个是必须的,否则注解不会生效,另外,该注解一定要声明在spring主配置文件中才会生效 --> <cache:annotation-driven cache-manager="cacheManager" /> <!-- spring自己的换管理器,这里定义了两个缓存位置名称 ,既注解中的value --> <bean id="cacheManager" class="org.springframework.cache.support.SimpleCacheManager"> <property name="caches"> <set> <bean class="org.cpframework.core.cache.memcached.MemcachedCache"> <property name="cache" ref="defaultCache"/> </bean> <bean class="org.cpframework.core.cache.memcached.MemcachedCache"> <property name="cache" ref="commonCache"/> </bean> </set> </property> </bean> <!-- memcached client defaultCache --> <bean name="defaultCache" class="com.google.code.ssm.CacheFactory"> <property name="cacheClientFactory"> <bean class="com.google.code.ssm.providers.xmemcached.MemcacheClientFactoryImpl" /> </property> <property name="addressProvider"> <bean class="com.google.code.ssm.config.DefaultAddressProvider"> <property name="address" value="192.168.xx.xx:11211" /> </bean> </property> <property name="configuration"> <bean class="com.google.code.ssm.providers.CacheConfiguration"> <property name="consistentHashing" value="true" /> </bean> </property> <property name="cacheName" value="default"/> </bean> <!-- memcached client commonCache --> <bean name="commonCache" class="com.google.code.ssm.CacheFactory"> <property name="cacheClientFactory"> <bean class="com.google.code.ssm.providers.xmemcached.MemcacheClientFactoryImpl" /> </property> <property name="addressProvider"> <bean class="com.google.code.ssm.config.DefaultAddressProvider"> <property name="address" value="192.168.xx.xx:11211" /> </bean> </property> <property name="configuration"> <bean class="com.google.code.ssm.providers.CacheConfiguration"> <property name="consistentHashing" value="true" /> </bean> </property> <property name="cacheName" value="commonCache"/> </bean>
MemcachedCache.java
package org.cpframework.core.cache.memcached; import java.util.concurrent.TimeoutException; import org.springframework.cache.Cache; import org.springframework.cache.support.SimpleValueWrapper; import com.google.code.ssm.api.format.SerializationType; import com.google.code.ssm.providers.CacheException; public class MemcachedCache implements Cache{ private com.google.code.ssm.Cache cache; public com.google.code.ssm.Cache getCache() { return cache; } public void setCache(com.google.code.ssm.Cache cache) { this.cache = cache; } @Override public String getName() { // TODO Auto-generated method stub return this.cache.getName(); } @Override public Object getNativeCache() { // TODO Auto-generated method stub return this.cache; } @Override public ValueWrapper get(Object key) { // TODO Auto-generated method stub Object object = null; try { object = this.cache.get((String)key, SerializationType.JAVA); } catch (TimeoutException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (CacheException e) { // TODO Auto-generated catch block e.printStackTrace(); } return (object != null ? new SimpleValueWrapper(object) : null); } @Override public void put(Object key, Object value) { // TODO Auto-generated method stub try { this.cache.set((String)key, 86400, value, SerializationType.JAVA); } catch (TimeoutException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (CacheException e) { // TODO Auto-generated catch block e.printStackTrace(); } } @Override public void evict(Object key) { // TODO Auto-generated method stub try { this.cache.delete((String)key); } catch (TimeoutException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (CacheException e) { // TODO Auto-generated catch block e.printStackTrace(); } } @Override public void clear() { // TODO Auto-generated method stub try { this.cache.flush(); } catch (TimeoutException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (CacheException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }
原文 http://hanqunfeng.iteye.com/blog/2175075