EhCache

来源:互联网 发布:十年前你错过了淘宝 编辑:程序博客网 时间:2024/05/16 09:13

常见缓存框架:EhCache,oschcache

1.需要配置一个xml文件,官网上有

<?xml version="1.0" encoding="UTF-8"?><ehcache name="EventCache">   <defaultCache      maxElementsInMemory="10"      eternal="false"      timeToIdleSeconds="120"      timeToLiveSeconds="120"      overflowToDisk="false">    </defaultCache></ehcache>

 2.cache工具类,封装

package org.wangcong.cache;import java.util.HashMap;import java.util.Map;import org.wangcong.cache.interfaces.InitCacheInter;import net.sf.ehcache.Cache;import net.sf.ehcache.CacheManager;public class CacheUtil {private static Map<String,String> CACHE_CLASS = new HashMap<String,String>();//缓存和实现类对应表,应该从数据库中读取,这里模拟private static CacheManager manager = null;//缓存总管static{manager = CacheManager.create();CACHE_CLASS.put("CACHE_CODE1", "org.wangcong.cache.impl.InitCacheInterImpl1");}public static Cache getCache(String cacheName)throws Exception{//获取具体缓存Cache cache = manager.getCache(cacheName);if(cache==null){cache = new Cache(cacheName, 5000, false, false, 5, 2);manager.addCache(cache);initCache(cache,cacheName);}return cache;}private static void initCache(Cache cache,String cacheName) throws Exception{//加载缓存资源//因为cacheName-->缓存具体实现类String className = CACHE_CLASS.get(cacheName);InitCacheInter initCache = (InitCacheInter) Class.forName(className).newInstance();initCache.initCache(cache);}public static Object getValue(Cache cache,String key){return cache.get(key).getObjectValue();}}

 3.定义接口契约

package org.wangcong.cache.interfaces;import net.sf.ehcache.Cache;public interface InitCacheInter {public void initCache(Cache cache)throws Exception;}

 4.定义一个实现类

package org.wangcong.cache.impl;import org.wangcong.cache.interfaces.InitCacheInter;import net.sf.ehcache.Cache;import net.sf.ehcache.Element;public class InitCacheInterImpl1 implements InitCacheInter {public InitCacheInterImpl1(){}public void initCache(Cache cache) throws Exception {//模拟加载数据Element ele1 = new Element("key1", "value1");Element ele2 = new Element("key2", "value2");//...Element("key",Object obj);cache.put(ele1);cache.put(ele2);}}

 5.定义一些KEY

package org.wangcong.cache;public class CacheStatic {final public static String CACHE_CODE1 = "CACHE_CODE1";//org.wangcong.cache.impl.InitCacheInterImpl1}

 6.定义一个业务实现类

package org.wangcong.cache.test.service;import net.sf.ehcache.Cache;import org.wangcong.cache.CacheStatic;import org.wangcong.cache.CacheUtil;public class CacheCode1 {public Object getValue(String key)throws Exception{Cache cache = CacheUtil.getCache(CacheStatic.CACHE_CODE1);Object obj = CacheUtil.getValue(cache, key);return obj;}}

 7.主函数,进行测试

package org.wangcong.cache.test;import org.wangcong.cache.test.service.CacheCode1;public class CacheDeno {/** * @param args */public static void main(String[] args) {CacheCode1 code1 = new CacheCode1();try {System.out.println(code1.getValue("key1"));} catch (Exception e) {e.printStackTrace();}}}

 -----

这样把业务层和实现层全部分离出来,可扩展性比较好些--OVER

 

0 0
原创粉丝点击