`
qq1988627
  • 浏览: 107077 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

缓存处理工具类

    博客分类:
  • 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);
	}	

}

 

分享到:
评论

相关推荐

    Android 数据缓存工具类

    本文将深入探讨Android数据缓存工具类的设计与实现,特别是针对JSON数据和字符串的缓存,并且会涉及过期时间管理,以确保数据的新鲜度。 首先,我们要理解数据缓存的基本原理。数据缓存是一种在本地存储常用数据的...

    图片缓存工具类

    在IT行业中,图片缓存工具类是开发移动应用或网页时不可或缺的一部分,它主要用于优化用户体验,提高应用程序性能,特别是对于那些需要频繁加载和显示图片的应用。这个“图片缓存工具类”很可能是一个自定义的Java或...

    Exoplayer简单缓存工具类

    Exoplayer可以通过创建CacheDataSourceFactory然后引用SimpleCache来创建实例,从而实现缓存效果。

    缓存工具类

    这是缓存工具包,对C#缓存做好很好的处理,是一个不错的工具类,可以直接应用与开发

    安卓开发框架工具类相关-屏幕适配键盘输入缓存XMPP工具类.rar

    在安卓应用开发中,工具类(Utils)是程序员经常使用的辅助模块,它们提供了一系列静态方法,帮助处理常见的任务,如屏幕适配、键盘输入管理、数据缓存等。本压缩包包含了一些与这些主题相关的工具类,对于安卓...

    Redis工具类,方便缓存读写

    在实际项目中,根据具体需求,还可以进一步扩展工具类的功能,例如增加异常处理、连接超时重试机制、支持Sentinel或Cluster集群模式等。总之,Redis工具类是Java开发者与Redis交互的重要桥梁,它的存在大大简化了...

    Redis 缓存穿透、缓存击穿工具类资源

    Redis 缓存穿透的处理(缓存空值) Redis缓存击穿处理(互斥锁与逻辑删除方案) 封装为工具类,并适用于所有需要进行缓存穿透、击穿的方案,采用了泛型以及Lambda 函数式编程来完成编码

    图片处理工具类

    "图片处理工具类"就是为了解决这些问题而设计的,它集成了多种常用的图片操作功能,如图片压缩、格式转换和尺寸调整等。下面将详细阐述这些知识点。 1. **图片压缩**: 在Android中,图片压缩主要目的是减小图片的...

    android图片三级缓存工具类

    在这个场景下,我们讨论的是一个名为"android图片三级缓存工具类"的实现,它可以帮助我们有效地管理和加载应用中的图片。 首先,我们要理解什么是图片的三级缓存。一级缓存通常指的是内存缓存,它将图片数据存储在...

    Exoplayer配套缓存工具类,需要自己处理异步。

    Exoplayer配套缓存工具类,需要自己处理异步。

    数据缓存的一个工具类

    数据缓存的一个工具类,方便攻城狮对一些基本数据类型进行数据缓存,特别还加了对集合的缓存,更加方便对app数据处理

    Android-一个封装DiskLruCache的缓存工具类

    这个"Android-一个封装DiskLruCache的缓存工具类"正是为了简化开发者使用`DiskLruCache` 的过程而设计的。 `DiskLruCache` 是基于Least Recently Used(LRU)策略的磁盘缓存,它会优先删除最近最少使用的数据,以...

    Java+redis缓存工具类(SSM)

    本项目提供了一个Java实现的Redis缓存工具类,结合SSM框架,可以帮助开发者快速地集成和管理Redis缓存。 首先,让我们了解一下Java中的SSM框架: 1. **Spring**:这是一个全面的开源应用框架,提供了依赖注入(DI)...

    自己整理的C#常用工具类

    6. **异常处理**:工具类的方法可能需要处理各种异常情况,合理抛出和捕获异常,以提供健壮的API。 7. **代码组织**:将相关的工具方法放在同一个类中,便于管理和查找。例如,所有与字符串处理相关的工具方法可以...

    《项目可用》CacheUtil缓存工具类.rar

    8. **异常处理**:良好的缓存工具类会考虑异常情况,如数据加载失败、缓存溢出等,通过try-catch语句或自定义异常类来处理这些问题,保证程序的健壮性。 9. **测试与性能优化**:CacheUtil可能包含了单元测试和性能...

    android工具类 26个实用工具类

    2. **字符串处理工具类**:如`StringUtil`,提供字符串的格式化、检查空值、拼接、分割等操作,避免在代码中反复进行这些基础操作。 3. **日期时间工具类**:例如`DateUtil`,可以方便地进行日期时间的转换,如将...

    android工具类-外部存储的缓存文件

    在Android开发中,工具类(Util Class)是程序员经常创建的一种辅助类,它们通常包含一组静态方法,用于执行特定的任务,比如处理数据、提供便利功能等。本篇将重点讲解如何在Android中创建一个用于管理外部存储缓存...

    基于LruCache listView缓存图片工具类

    本文将深入探讨如何使用基于`LruCache`的图片加载工具类在ListView中实现图片缓存。 首先,`LruCache`(Least Recently Used Cache)是一种常见的缓存淘汰策略,它的核心思想是:当缓存满时,优先淘汰最近最少使用...

    自定义图片三级缓存工具类

    - 使用时,调用`loadImage()`方法,工具类会自动处理缓存逻辑,无需开发者过多关注细节。 - 优化方面,可以根据设备内存情况调整内存缓存大小,考虑采用异步加载策略,避免阻塞UI线程。 - 另外,可以结合图片压缩...

Global site tag (gtag.js) - Google Analytics