自己动手写ehcache工具类和配置文件ehcache.xml

以下代码为ehcache的工具类代码,仅作参考

package com.pzoom.ehcache.util;

/*
 * 生成ehcache的实例,获取cache,调用getCrabmanCache就可以获取cache进行使用
 */
import java.io.Serializable;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.HashSet;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;
import java.util.Set;

import net.sf.ehcache.Cache;
import net.sf.ehcache.CacheManager;
import net.sf.ehcache.Element;

import org.apache.log4j.Logger;


public class EhCacheUtil {
	private static Cache brandKeywordMonitorCache;
	private static Cache httpStatusCache;
	private static CacheManager manager;
	private static EhCacheUtil instance;
	private static Logger log = Logger.getLogger(EhCacheUtil.class);

	static {
//		init();
	}

	public static Cache getBrandKeywordMonitorCache() {
		return brandKeywordMonitorCache;
	}
	
	public static Cache getHttpStatusCache() {
		return httpStatusCache;
	}

	public static CacheManager getManager() {
		return manager;
	}

	public static EhCacheUtil init() {
		log.debug("[EhcacheUtil.init]");
		System.setProperty("net.sf.ehcache.enableShutdownHook","true");
		if (instance == null) {
			
			instance = new EhCacheUtil();
			manager = CacheManager.create(EhCacheUtil.class.getClassLoader().getResourceAsStream("ehcache.xml"));
			
			brandKeywordMonitorCache = manager.getCache("BrandKeywordMonitorCache");
			httpStatusCache=manager.getCache("HttpStatusCache");
		}
		return instance;

	}
	
	public static EhCacheUtil init(String path) {
		log.debug("[EhcacheUtil.init]");
		System.setProperty("net.sf.ehcache.enableShutdownHook","true");
		if (instance == null) {
			
			instance = new EhCacheUtil();
			manager = CacheManager.create(EhCacheUtil.class.getClassLoader().getResourceAsStream(path));
			
			brandKeywordMonitorCache = manager.getCache("BrandKeywordMonitorCache");
			httpStatusCache=manager.getCache("HttpStatusCache");
		}
		return instance;

	}
	
	private static boolean isNull(Element e)
	{
		return e==null||e.getObjectValue()==null||e.getValue()==null;
	}

	/**
	 * 存入
	 * @param <T>
	 * @param cache 缓存库
	 * @param key   键
	 * @param value 值
	 */
	public static <T extends Serializable> void put(Cache cache, String key, T value) {
		Element e = new Element(key, value);
		cache.put(e);
		cache.flush() ;
	}
	
	/**
	 * 存入 并设置元素是否永恒保存
	 * @param <T>
	 * @param cache 缓存库
	 * @param key   键
	 * @param value 值
	 */
	public static <T extends Serializable> void put(Cache cache, String key, T value, boolean eternal) {
		Element element = new Element(key, value);
		element.setEternal(eternal);
		cache.put(element);
		cache.flush() ;
	}
	
	/**
	 * 存入
	 * @param <T>
	 * @param cache 缓存库
	 * @param key   键
	 * @param value 值
	 * @param timeToLiveSeconds 最大存活时间
	 * @param timeToIdleSeconds 最大访问间隔时间
	 */
	public static <T extends Serializable> void put(Cache cache, String key, T value,int timeToLiveSeconds,int timeToIdleSeconds) {
		Element element = new Element(key, value);
		element.setTimeToLive(timeToLiveSeconds);
		element.setTimeToIdle(timeToIdleSeconds);
		cache.put(element);
		cache.flush() ;
	}
	
	public static Object getCacheElement(Cache cache, String key) {
		Element e=cache.get(key);
		return e;
	}
	
	public static Object get(Cache cache, String key) {
		Element e=cache.get(key);
		if(e!=null)
		{
			return e.getObjectValue();
		}
		return null;
	}
	
	public static void remove(Cache cache, String key) {
		cache.remove(key);
	}
	
	public static void removeAll(Cache cache, Collection<String> keys) {
		cache.removeAll(keys);
	}

	@SuppressWarnings("unchecked")
	public static void addToList(Cache cache, String key, Serializable value) {
//		if("dailytaskidpingpailist".equals(key))
//		{
//			log.warn(value);
//			new Exception().printStackTrace();
//		}
		Element e = cache.get(key);
		if (isNull(e)) {
			List<Serializable> list =  Collections.synchronizedList(new LinkedList<Serializable>());
			list.add(value);
			e = new Element(key, list);
			e.setEternal(true);
			cache.put(e);
		} else {
			List<Serializable> list = (List<Serializable>) e.getObjectValue();
			list.add(value);
			e = new Element(key, list);
			e.setEternal(true);
			cache.put(e);
		}
		
		cache.flush() ;
	}
	
	@SuppressWarnings("unchecked")
	public static void addAllToList(Cache cache, String key, Collection<? extends Serializable> value) {
		Element e = cache.get(key);
		if (isNull(e)) {
			List<Serializable> list =  Collections.synchronizedList(new LinkedList<Serializable>());
			list.addAll(value);
			e = new Element(key, list);
			e.setEternal(true);
			cache.put(e);
		} else {
			List<Serializable> list = (List<Serializable>) e.getObjectValue();
			list.addAll(value);
			log.debug(key+"--"+list);
			e = new Element(key, list);
			e.setEternal(true);
			cache.put(e);
		}
		
		cache.flush() ;
	}
	
	@SuppressWarnings("unchecked")
	public static void addToHashSet(Cache cache, String key, Serializable value) {
		Element e = cache.get(key);
		if (isNull(e)) {
			Set<Serializable> list =  Collections.synchronizedSet(new HashSet<Serializable>());
			list.add(value);
			e = new Element(key, list);
			e.setEternal(true);
			cache.put(e);
		} else {
			Set<Serializable> list = (Set<Serializable>) e.getObjectValue();
			list.add(value);
			e = new Element(key, list);
			e.setEternal(true);
			cache.put(e);
		}
		
		cache.flush() ;
	}
	
	@SuppressWarnings("unchecked")
	public static void addAllToHashSet(Cache cache, String key, Collection<? extends Serializable> value) {
		Element e = cache.get(key);
		if (isNull(e)) {
			Set<Serializable> list =  Collections.synchronizedSet(new HashSet<Serializable>());
			list.addAll(value);
			e = new Element(key, list);
			e.setEternal(true);
			cache.put(e);
		} else {
			Set<Serializable> list = (Set<Serializable>) e.getObjectValue();
			list.addAll(value);
			e = new Element(key, list);
			e.setEternal(true);
			cache.put(e);
		}
		
		cache.flush() ;
	}
	
	@SuppressWarnings("unchecked")
	public static void addToArrayList(Cache cache, String key, Serializable value) {
		Element e = cache.get(key);
		if (isNull(e)) {
			List<Serializable> list =  Collections.synchronizedList(new ArrayList<Serializable>());
			list.add(value);
			e = new Element(key, list);
			e.setEternal(true);
			cache.put(e);
		} else {
			List<Serializable> list =  (List<Serializable>) e.getObjectValue();
			list.add(value);
			e = new Element(key, list);
			e.setEternal(true);
			cache.put(e);
		}
		
		cache.flush() ;
	}
	
	@SuppressWarnings("unchecked")
	public static void addAllToArrayList(Cache cache, String key, Collection<? extends Serializable> value) {
		Element e = cache.get(key);
		if (isNull(e)) {
			List<Serializable> list =  Collections.synchronizedList(new ArrayList<Serializable>());
			list.addAll(value);
			e = new Element(key, list);
			e.setEternal(true);
			cache.put(e);
		} else {
			List<Serializable> list =  (List<Serializable>) e.getObjectValue();
			list.addAll(value);
			e = new Element(key, list);
			e.setEternal(true);
			cache.put(e);
		}
		
		cache.flush() ;
	}
	
	@SuppressWarnings("unchecked")
	public static <T extends Serializable> T popFromList(Cache cache, String key, Class<T> T)
	{
		Element e=cache.get(key);
		if(e!=null)
		{
			List<Serializable> list=(List<Serializable>) e.getObjectValue();
			Iterator<Serializable> it=list.iterator();
			if(list.size()>0)
			{
				Serializable obj=it.next();
				it.remove();
				e=new Element(key,list);
				e.setEternal(true);
				cache.put(e);
				cache.flush() ;
				return (T) obj;
			}
		}
		return null;
	}

	@SuppressWarnings("unchecked")
	public static <T extends Serializable> List<T> popFromList(Cache cache, String key,
			int count, Class<T> T) {
		Element e = cache.get(key);
		if (e != null) {
			List<Serializable> list = (List<Serializable>) e.getObjectValue();
			
			if(count<1)
			{
				List<T> result = (List<T>) new ArrayList<Serializable>(list);
				list.clear();
				e = new Element(key, list);
				e.setEternal(true);
				cache.put(e);
				cache.flush() ;
				return result;
			}
			
			List<T> result = new ArrayList<T>(count);
			Iterator<Serializable> it=list.iterator();
			for (int i = 0; i < count && it.hasNext(); i++) {
				Serializable obj = it.next();
				it.remove();
				result.add((T) obj);
			}
			
			e = new Element(key, list);
			e.setEternal(true);
			cache.put(e);
			cache.flush() ;
			return result;
		}
		return null;
	}
	
	@SuppressWarnings("unchecked")
	public static <T extends Serializable> T popFromHashSet(Cache cache, String key, Class<T> T)
	{
		Element e=cache.get(key);
		if(e!=null)
		{
			Set<Serializable> list=(Set<Serializable>) e.getObjectValue();
			Iterator<Serializable> it=list.iterator();
			if(list.size()>0)
			{
				Serializable obj=it.next();
				it.remove();
				e=new Element(key,list);
				e.setEternal(true);
				cache.put(e);
				cache.flush() ;
				return (T) obj;
			}
		}
		return null;
	}

	@SuppressWarnings("unchecked")
	public static <T extends Serializable> List<T> popFromHashSet(Cache cache, String key,
			int count, Class<T> T) {
		Element e = cache.get(key);
		if (e != null) {
			Set<Serializable> list = (Set<Serializable>) e.getObjectValue();
			
			if(count<1)
			{
				List<T> result = (List<T>) new ArrayList<Serializable>(list);
				list.clear();
				e = new Element(key, list);
				e.setEternal(true);
				cache.put(e);
				cache.flush() ;
				return result;
			}
			
			List<T> result = new ArrayList<T>(count);
			Iterator<Serializable> it=list.iterator();
			for (int i = 0; i < count && it.hasNext(); i++) {
				Serializable obj = it.next();
				it.remove();
				result.add((T) obj);
			}
			
			e = new Element(key, list);
			e.setEternal(true);
			cache.put(e);
			cache.flush() ;
			return result;
		}
		return null;
	}
	
	@SuppressWarnings("unchecked")
	public static int getCollectionSize(Cache cache, String key) {
		Element e = cache.get(key);
		if (e != null) {
			Collection<Serializable> list = (Collection<Serializable>) e.getObjectValue();
			return list.size();
		}
		return 0;
	}
	
	@SuppressWarnings("rawtypes")
	public static List getKeys(Cache cache) {
		return cache.getKeys();
	}
	
	public static List<String> getKeys(Cache cache, String start) {
		List<?> list=cache.getKeys();
		List<String> result=new ArrayList<String>(list.size());
		for(Object obj:list)
		{
			if(obj!=null&&obj.getClass()==String.class)
			{
				String s=(String) obj;
				if(s.startsWith(start))
					result.add(s);
			}
		}
		return result;
	}
	
	public static void main(String[] args)
	{
		init() ;
		put(httpStatusCache, "xiaochen", "a") ;
		List<String> list = new ArrayList<String>() ;
		list.add("b") ;
		list.add("c") ;
		list.add("d") ;
		
		put(httpStatusCache, "xiaochen", "b") ;
		put(httpStatusCache, "xiaochen", "c") ;
		
		Element aaaa = new Element("xiaohan", list) ;
		httpStatusCache.put(aaaa) ;
		
		Element element = httpStatusCache.get("xiaochen") ;
		
		Element aaaaa = httpStatusCache.get("xiaohan") ;
		System.out.println("aaaa : " + aaaaa.getValue());
		
		System.out.println("** : " + element.getValue());
		
		System.out.println("keys : " + httpStatusCache.getKeys().size());
		System.out.println("keys : " + httpStatusCache.getKeys().get(1));
		int a = 10 ;
		assert a==10 : "Out assertion failed!" ;
		
		element.getValue() ;
		
	}
}

ehcache.xml配置文件
<?xml version="1.0" encoding="UTF-8"?>
<ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="http://ehcache.org/ehcache.xsd">
	<!-- 设置磁盘持久化的位置 -->
	<diskStore path="E:/temp" /> 
	<defaultCache maxElementsInMemory="10000" eternal="true"
        overflowToDisk="true" />
    <cache name="BrandKeywordMonitorCache"

           maxElementsInMemory="0"

           maxElementsOnDisk="90000" 
			
           eternal="false" 

           overflowToDisk="true" 

           diskSpoolBufferSizeMB="2048"

           timeToIdleSeconds="7200" 
           timeToLiveSeconds="7200" 
           memoryStoreEvictionPolicy="LFU"
           diskPersistent="true" 
           logging="false"
            />
     <cache name="HttpStatusCache"

           maxElementsInMemory="0"

           maxElementsOnDisk="90000" 
			
           eternal="false"
           overflowToDisk="true" 
           diskSpoolBufferSizeMB="2048"
           diskExpiryThreadIntervalSeconds="120"
           diskPersistent="true" 
		
           timeToIdleSeconds="7200" 
           timeToLiveSeconds="7200" 
           memoryStoreEvictionPolicy="LFU"
           
           logging="false"
            />
    <cache name="CrabmanCacheALL"

           maxElementsInMemory="90000"

           maxElementsOnDisk="90000" 
			
           eternal="false" 

           overflowToDisk="true" 

           diskSpoolBufferSizeMB="2048"

           timeToIdleSeconds="7200" 
           timeToLiveSeconds="7200" 
           memoryStoreEvictionPolicy="LFU"
           diskPersistent="true" 
            />        
</ehcache> 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值