Spring Cache注解+Memcached
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></pre>
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(); } }
}</pre>
原文 http://hanqunfeng.iteye.com/blog/2175075