zoukankan      html  css  js  c++  java
  • 缓存处理工具类

    package com.byd.mes.util.cache;
    
    import java.io.Serializable;
    import java.text.SimpleDateFormat;
    import java.util.ArrayList;
    import java.util.Date;
    import java.util.HashMap;
    import java.util.List;
    import java.util.Map;
    
    import net.sf.ehcache.Cache;
    import net.sf.ehcache.Element;
    
    import org.apache.commons.logging.Log;
    import org.apache.commons.logging.LogFactory;
    
    import com.byd.mes.util.BeanFactory;
    
    public interface CacheManager {
    	/**
    	 *  回调函数
    	 */
    	public interface CallBack{
    		Serializable callBack() throws Exception;
    	}	
    	/**
    	 * 获取缓存值
    	 * @param cacheKey
    	 * @return Object
    	 */
    	public Object get(String cacheKey);
    	
    	/**
    	 * 记录该缓存
    	 * @param cacheKey
    	 * @param callBack
    	 * @return Object
    	 */
    	public Object cache(String cacheKey,CacheManager.CallBack callBack);
    	
    	/**
    	 * 根据KEY清空缓存
    	 * @param cacheKey
    	 */
    	public void clear(String cacheKey);
    	
    	/**
    	 * 清空所有缓存
    	 */
    	public void clearAllCache();
    	/**
    	 * 根据名称清空缓存
    	 * @param tacticName
    	 */
    	public void clearCacheByTacticName(String tacticName);
    	
    	/**
    	 * 根据名称获取缓存
    	 * @param tacticName
    	 * @return List
    	 */
    	public List<Map> getCache(String tacticName);	
    	
    }
    
    
    
    package com.byd.mes.util.cache;
    
    import java.text.SimpleDateFormat;
    import java.util.ArrayList;
    import java.util.Date;
    import java.util.HashMap;
    import java.util.List;
    import java.util.Map;
    
    import net.sf.ehcache.Cache;
    import net.sf.ehcache.Element;
    
    import org.apache.commons.lang.StringUtils;
    import org.apache.commons.logging.Log;
    import org.apache.commons.logging.LogFactory;
    
    import com.byd.mes.bussiness.service.system.ext.CacheTacticHandle;
    
    public class CacheManagerImpl implements CacheManager{
    	private static final Log log = LogFactory.getLog(CacheManagerImpl.class);
    	private static final SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    	private Cache cache;
    	private CacheTacticHandle cacheTacticHandle;
    	@Override
    	public Object get(String cacheKey){
    		return getCache().get(cacheKey);
    	}
    	@Override
    	public Object cache(String cacheKey,CacheManager.CallBack callBack){
    		String k = StringUtils.left(cacheKey, cacheKey.indexOf("@"));
    		if(!cacheKey.startsWith("system.cacheTacic") //强制开启缓存规则本身的缓存
    			&& !cacheTacticHandle.isEnable(k) //用户是否开启了相关的缓存规则	
    		){
    			try{
    				log.debug("未开启缓存规则>>> "+cacheKey);
    				return callBack.callBack();
    			}catch(Exception ex){
    				throw new RuntimeException(ex);
    			}
    		}
    		Cache cache = getCache();
    		Element obj = cache.get(cacheKey);
    		Object result = null;
    		if(obj == null){	
    			try{
    				result = callBack.callBack();
    			}catch(Exception ex){
    				throw new RuntimeException(ex);
    			}
    			Element element = new Element(cacheKey, result);
    			log.debug("设置缓存[cacheKey:"+cacheKey+",cacheValue:"+result+"]");
    			getCache().put(element);
    		}
    		else{
    			result = obj.getValue();
    			log.debug("数据来自缓存>>>"+result);
    		}
    		return result;
    	}
    	@Override
    	public void clear(String cacheKey){
    		log.debug("Clear cache >>>"+cacheKey);
    		boolean b = getCache().remove(cacheKey);
    	}
    	@Override
    	public void clearAllCache() {
    		getCache().removeAll();
    	}
    	@Override
    	public void clearCacheByTacticName(String tacticName) {
    		Cache cache = getCache();
    		List<String> keys = cache.getKeys();
    		for(String key : keys){
    			if(key.startsWith(tacticName)){
    				cache.remove(key);
    			}
    		}
    	}
    	@Override
    	public List<Map> getCache(String tacticName) {
    		List<Map> list = new ArrayList<Map>();
    		Cache cache = getCache();
    		List<String> keys = cache.getKeys();
    		for(String key : keys){
    			if(key.startsWith(tacticName)){
    				Map m = new HashMap();
    				Element e = cache.get(key);
    				m.put("key", key);
    				log.debug(">>>>>>>>>>>>>>>>>>>>>>>>>>>>>"+e.getValue());
    				m.put("value", e.getValue().toString());
    				m.put("createTime", format.format(new Date(e.getCreationTime())));
    				list.add(m);
    			}
    		}
    		return list;
    	}
    	public void setCache(Cache cache) {
    		this.cache = cache;
    	}
    	public Cache getCache() {
    		return cache;
    	}
    	public void setCacheTacticHandle(CacheTacticHandle cacheTacticHandle) {
    		this.cacheTacticHandle = cacheTacticHandle;
    	}
    	public CacheTacticHandle getCacheTacticHandle() {
    		return cacheTacticHandle;
    	}
    
    
    	
    }
    
    
    
    package com.byd.mes.util.cache;
    
    import java.util.Map;
    
    import org.apache.commons.logging.Log;
    import org.apache.commons.logging.LogFactory;
    
    import com.byd.mes.commons.exception.NestedRuntimeException;
    import com.byd.mes.view.action.ActionException;
    
    public class CacheException extends NestedRuntimeException {
    	private static final Log log = LogFactory.getLog(CacheException.class);
    	
    	public CacheException(String errorCode, String message) {
    		super(errorCode, message);
    	}
    	
    	public CacheException(String errorCode,String message, Throwable cause) {
    		super(errorCode,message, cause);
    	}
    	
    	public CacheException(String errorCode, Map<String,Object> args, String message, Throwable cause) {
    		super(errorCode,args,message, cause);
    	}	
    
    }
    
  • 相关阅读:
    好还是坏:人工智能二分类问题
    神经网络手写数字识别
    TensorFlow or PyTorch
    什么是深度学习
    五个常见 AI 开发库
    AI——第四次工业革命
    NodeJs获取不到POST参数
    Android权限
    【nodejs学习】3.进程管理及异步编程
    每日一题
  • 原文地址:https://www.cnblogs.com/qq1988627/p/6606885.html
Copyright © 2011-2022 走看看