首页 > 代码库 > J2EE开发框架搭建(9) - memcached与spring提供的cache接口整合
J2EE开发框架搭建(9) - memcached与spring提供的cache接口整合
spring 从3.x就提供了cache接口,spring默认实现的缓存是ehcache,spring的cache接口:
public interface Cache { String getName(); Object getNativeCache(); ValueWrapper get(Object key); <T> T get(Object key, Class<T> type); void put(Object key, Object value); void evict(Object key); void clear(); interface ValueWrapper { Object get(); } }从spring的cache接口,我们可以看出spring的cache模型就是在内存中画一片内存区域出来,为这盘内存指定名称,在这盘内存区域中以key-value的方式存放数据,画个图来说明cache的存取方式,用户和部门的缓存,名称分别为DepartCache和UserCache
1. 要使用spring的cache,首先要实现cacheManager, 可以参考spring对ehcache的实现,整合memcached的代码如下:
public class MemcachedCacheManager extends AbstractTransactionSupportingCacheManager { private ConcurrentMap<String, Cache> cacheMap = new ConcurrentHashMap<String, Cache>(); private Map<String, Integer> expireMap = new HashMap<String, Integer>(); //缓存的时间 private MemcachedClient memcachedClient; //xmemcached的客户端 public MemcachedCacheManager() { } @Override protected Collection<? extends Cache> loadCaches() { Collection<Cache> values = cacheMap.values(); return values; } @Override public Cache getCache(String name) { Cache cache = cacheMap.get(name); if (cache == null) { Integer expire = expireMap.get(name); if (expire == null) { expire = 0; expireMap.put(name, expire); } cache = new MemcachedCache(name, expire.intValue(), memcachedClient); cacheMap.put(name, cache); } return cache; } public void setMemcachedClient(MemcachedClient memcachedClient) { this.memcachedClient = memcachedClient; } public void setConfigMap(Map<String, Integer> configMap) { this.expireMap = configMap; } }2. 接着看下MemcachedCache的实现,主要实现spring的cache接口
public class MemcachedCache implements Cache { private final String name; private final MemCache memCache; public MemcachedCache(String name, int expire, MemcachedClient memcachedClient) { this.name = name; this.memCache = new MemCache(name, expire, memcachedClient); } @Override public void clear() { memCache.clear(); } @Override public void evict(Object key) { memCache.delete(key.toString()); } @Override public ValueWrapper get(Object key) { ValueWrapper wrapper = null; Object value = http://www.mamicode.com/memCache.get(key.toString());>3. spring提供的这套缓存api其实就是底层缓存框架与应用程序之间的中间层转换, 这里还有一个类就是MemCache,这个类主要是对应memcached缓存的模型,spring的缓存只是提供了一套api,具体的实现要根据底层使用的什么缓存框架:MemCache.java
public class MemCache { private static Logger log = LoggerFactory.getLogger(MemCache.class); private Set<String> keySet = new HashSet<String>(); private final String name; private final int expire; private final MemcachedClient memcachedClient; public MemCache(String name, int expire, MemcachedClient memcachedClient) { this.name = name; this.expire = expire; this.memcachedClient = memcachedClient; } public Object get(String key) { Object value = http://www.mamicode.com/null;>4. 在spring的配置文件中使用MemcachedCacheManager<cache:annotation-driven cache-manager="cacheManager" proxy-target-class="true" /> <!-- 开启缓存 --> <bean id="memcachedClientBuilder" class="net.rubyeye.xmemcached.XMemcachedClientBuilder"> <!-- 配置memcached的缓存服务器 --> <constructor-arg> <list> <bean class="java.net.InetSocketAddress"> <constructor-arg value=http://www.mamicode.com/"localhost" />>5. 到此为止,spring和memcached整合就完成了,spring的缓存还提供了很多的注解@Cachable,@cachePut.....,这里不多说了。
参考地址 :
http://zj0121.iteye.com/blog/1852270
http://jinnianshilongnian.iteye.com/blog/2001040
J2EE开发框架搭建(9) - memcached与spring提供的cache接口整合
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。