EhCache

常见缓存框架: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

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值