`
Peerless_
  • 浏览: 4345 次
  • 性别: Icon_minigender_1
社区版块
存档分类
最新评论

CacheUtil

    博客分类:
  • java
阅读更多
import java.io.IOException;
import java.util.ArrayList;
import java.util.Collection;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;
import javax.annotation.Resource;
import org.apache.commons.lang3.StringUtils;
import org.apache.http.util.TextUtils;
import org.apache.log4j.Logger;
import org.springframework.stereotype.Component;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import com.efoxconn.ipebg.common.domain.BaseBean;
import com.efoxconn.ipebg.report.util.EntityUtil;
/**
 * 緩存工具類
 *
 */
@Component("cacheUtil")
public class CacheUtil {
	@Resource(name="jedisPool")
	private JedisPool pool;
	private static final String KEY_PREFIX = "platform_";
	private static final int EXPIRE_TIME= 60 * 60;
	private static final Logger logger = Logger.getLogger(CacheUtil.class);
	/**
	 * 列舉所有key
	 */
	public void keys(){
		Jedis jedis = pool.getResource();
		Set<String> set = jedis.keys(KEY_PREFIX+"*");
		for(String str :set){
			System.out.println(str);
		}
		pool.returnResource(jedis);
	}
	/**
	 * 設置hash
	 * @param key
	 * @param map
	 */
	public void setMap(String key,Map<String,String> map){
		Jedis jedis = pool.getResource();
		jedis.hmset(KEY_PREFIX+key, map);
		jedis.expire(KEY_PREFIX+key, EXPIRE_TIME);
		pool.returnResource(jedis);
	}
	/**
	 * 獲取hash
	 * @param key
	 * @return
	 */
	public Map<String,String> getMap(String key){
		Jedis jedis = pool.getResource();
		Map<String,String> map = jedis.hgetAll(KEY_PREFIX+key);
		jedis.expire(KEY_PREFIX+key, EXPIRE_TIME);
		pool.returnResource(jedis);
		return map;
	}
	/**
	 * 獲取字符串
	 * @param key
	 * @return
	 */
	public String get(String key){
		Jedis jedis = pool.getResource();
		String result = jedis.get(KEY_PREFIX+key);
		jedis.expire(KEY_PREFIX+key, EXPIRE_TIME);
		pool.returnResource(jedis);
		return result;
	}
	/**
	 * 設置字符串
	 * @param key
	 * @param value
	 */
	public void set(String key,String value){
		Jedis jedis = pool.getResource();
		jedis.set(KEY_PREFIX+key, value);
		jedis.expire(KEY_PREFIX+key, EXPIRE_TIME);
		pool.returnResource(jedis);
	}
	/**
	 * 設置byte[]
	 * @param key
	 * @param bvalue
	 */
	public void bset(String key,byte[] bvalue){
		Jedis jedis = pool.getResource();
		jedis.set((KEY_PREFIX+key).getBytes(), bvalue);
		jedis.expire((KEY_PREFIX+key).getBytes(), EXPIRE_TIME);
		pool.returnResource(jedis);
	}
	/**
	 * 獲取byte[]
	 * @param key
	 * @return
	 */
	public byte[] bget(String key){
		Jedis jedis = pool.getResource();
		byte[] result = jedis.get((KEY_PREFIX+key).getBytes());
		jedis.expire((KEY_PREFIX+key).getBytes(), EXPIRE_TIME);
		pool.returnResource(jedis);
		return result;
	}
	/**
	 * 設置BaseBean
	 * @param key
	 * @param value
	 * @throws IOException
	 */
	public void setBeanMap(String key,Collection<? extends BaseBean> collection) throws IOException{
		if(collection == null){
			return;
		}
		Jedis jedis = pool.getResource();
		for(BaseBean bean : collection){
			jedis.hset((KEY_PREFIX+key).getBytes(), bean.getId().getBytes(), SerializableByteArrayUtil.serializable2ByteArray(bean));
		}
//		jedis.expire(KEY_PREFIX+key, EXPIRE_TIME);
		pool.returnResource(jedis);
	}
	/**
	 * 獲得BaseBean
	 * @param key
	 * @param value
	 * @throws IOException 
	 * @throws ClassNotFoundException 
	 */
	public List<?> getBeanMap(String key) throws IOException, ClassNotFoundException{
		Jedis jedis = pool.getResource();
		LinkedList<BaseBean> list = new LinkedList<BaseBean>();
		Map<byte[], byte[]> map = jedis.hgetAll((KEY_PREFIX+key).getBytes());
		if(map.size() == 0){
			return null;
		}
		for(Entry<byte[], byte[]> entry:map.entrySet()){
			list.push((BaseBean)SerializableByteArrayUtil.byteArray2Serializable(entry.getValue()));
		}
		pool.returnResource(jedis);
		return list;
	}
	/**
	 * 設置BaseBean
	 * @param key
	 * @param value
	 * @throws IOException
	 */
	public void setBeanMapItem(String key,BaseBean bean) throws IOException{
		if(bean == null){
			return;
		}
		Jedis jedis = pool.getResource();
		jedis.hset((KEY_PREFIX+key).getBytes(), bean.getId().getBytes(), SerializableByteArrayUtil.serializable2ByteArray(bean));
//		jedis.expire(KEY_PREFIX+key, EXPIRE_TIME);
		pool.returnResource(jedis);
	}
	/**
	 * 獲得BaseBean
	 * @param key
	 * @param value
	 * @throws IOException 
	 * @throws ClassNotFoundException 
	 */
	public BaseBean getBeanMapItem(String key,String id) throws IOException, ClassNotFoundException{
		Jedis jedis = pool.getResource();
		if(TextUtils.isEmpty(id)){
			return null;
		}
		byte[] bytes = jedis.hget((KEY_PREFIX+key).getBytes(), id.getBytes());
		BaseBean bean = (BaseBean) SerializableByteArrayUtil.byteArray2Serializable(bytes);
		pool.returnResource(jedis);
		return bean;
	}
	/**
	 * 設置BaseBean
	 * @param key
	 * @param value
	 * @throws IOException 
	 */
	public void setBeanList(String key,List<? extends BaseBean> list) throws IOException{
		if(list == null){
			return;
		}
		Jedis jedis = pool.getResource();
//		jedis.set(KEY_PREFIX+key, value);
		for(BaseBean bean : list){
			jedis.lpush((KEY_PREFIX+key+":"+bean.getId()).getBytes(), SerializableByteArrayUtil.serializable2ByteArray(bean));
		}
		
		
//		jedis.expire(KEY_PREFIX+key, EXPIRE_TIME);
		pool.returnResource(jedis);
	}
	/**
	 * 獲得BaseBean
	 * @param key
	 * @param value
	 * @throws IOException 
	 * @throws ClassNotFoundException 
	 */
	public List<BaseBean> getBeanList(String key) throws IOException, ClassNotFoundException{
		Jedis jedis = pool.getResource();
		LinkedList<BaseBean> list = new LinkedList<BaseBean>();
		
		List<byte[]> bytesList = jedis.lrange((KEY_PREFIX+key).getBytes(), 0, jedis.llen(key));
		if(bytesList == null){
			return null;
		}
		for(byte[] bytes : bytesList){
			list.push((BaseBean)SerializableByteArrayUtil.byteArray2Serializable(bytes));
		}
		pool.returnResource(jedis);
		return list;
	}
	/**
	 * 刪除key
	 * @param key
	 */
	public void del(String key){
		Jedis jedis = pool.getResource();
		long s = jedis.del(KEY_PREFIX+key);
		pool.returnResource(jedis);
	}
	/**
	 * 將數據對接存放
	 * @param key
	 * @param obj
	 * @param expireSeconds 超時時間(秒)
	 * @throws IOException
	 */
	public void setObject(String key,Object obj,int expireSeconds) throws IOException{
		if(StringUtils.isEmpty(key)||StringUtils.isBlank(key)){
			logger.error("對象緩存至redis失敗,因為key="+key);
			return;
		}
		if(obj==null){
			logger.error("對象緩存至redis失敗,因為obj="+obj);
			return;
		}
		
		Jedis jedis = null;
		try {
			jedis = pool.getResource();
			if(jedis==null){
				logger.error("連接redis連接失敗");
				return;
			}
			if(!jedis.isConnected()){
				logger.error("獲取的redis連接狀態已關閉");
				return;
			}
			String _k=KEY_PREFIX+DateUtil.getNowTime("dd")+key;
			byte[] bs=EntityUtil.toByteArray(obj);		
			jedis.setex(_k.getBytes(),expireSeconds,bs);
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			if(jedis!=null){
				pool.returnResource(jedis);
			}
	    }

	}
	public <T> T getObject(String key) throws IOException{
		if(true||StringUtils.isEmpty(key)||StringUtils.isBlank(key)){
			logger.error("獲取redis失敗,因為key="+key);
			return null;
		}
		Jedis jedis = null;
		try {
			jedis = pool.getResource();
			if(jedis==null){
				logger.error("連接redis連接失敗");
				return null;
			}
			if(!jedis.isConnected()){
				logger.error("獲取的redis連接狀態已關閉");
				return null;
			}
			String _k=KEY_PREFIX+DateUtil.getNowTime("dd")+key;
			byte[] bs=jedis.get(_k.getBytes());			
			if(bs==null){
				return null;
			}
			return (T)EntityUtil.toObject(bs);
		} catch (Exception e) {
			logger.error("從redis里獲取對象失敗,key="+key);		
		}finally {
			if(jedis!=null){
				pool.returnResource(jedis);
			}
	    }
		return null;
	}
	/**
	 * 刪除所有key
	 */
	public String delKeys(){
		Jedis jedis = null;
		try{
			jedis = pool.getResource();
			Set<String> set = jedis.keys(KEY_PREFIX+"*");
			for(String str :set){
				jedis.del(str.getBytes());
			}
			pool.returnResource(jedis);
		}catch(Exception e){
			return "1";
		}
		return "0";
	}
	/**
	 * 列舉所有key
	 */
	public List<String> getKeys(){
		Jedis jedis = null;
		List<String> keyList=null;
		try{
			jedis = pool.getResource();
			keyList=new ArrayList<String>();
			Set<String> set = jedis.keys(KEY_PREFIX+"*");
			for(String str :set){
				keyList.add(str);
			}
			pool.returnResource(jedis);
		}catch(Exception e){
			return keyList;
		}
		return keyList;
	}
	/**
	 * 刪除key
	 * @param key
	 */
	public String delKey(String key){
		Jedis jedis = null;
		List<String> keyList=null;
		try{
			jedis = pool.getResource();
			long s = jedis.del(key.getBytes());
			pool.returnResource(jedis);
		}catch(Exception e){
			return "1";
		}
		return "0";
	}
}
分享到:
评论

相关推荐

    万能的CacheUtil

    【万能的CacheUtil】是针对Android开发中的缓存管理工具类,它集成了多种常见的缓存机制,如ACache、Data Cache、SharedPreferences (SP)等,并且扩展了SP以支持存储列表数据,大大简化了开发者在处理缓存时的工作。...

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

    这个名为“《项目可用》CacheUtil缓存工具类.rar”的压缩包文件显然包含了一个用于Java项目的缓存管理工具类,帮助开发者高效地存储和检索数据。以下是对这个工具类可能涉及的关键知识点的详细解释: 1. **Java ...

    CacheUtil.java

    CacheUtil.java用java语言实现在java项目开发过程中,对缓存进行管理的工具类

    有关单一窗口缓存配置和集群的事宜_V1.1.docx

    例如,可以使用 CacheUtil.clear() 方法清除缓存中的数据,或者使用 CacheUtil.containsKey() 方法检查缓存中是否存在某个键。 缓存数据的相关技术 缓存数据的相关技术包括缓存服务器、缓存算法、缓存协议等。例如...

    Caffeine工具包

    工具包中包含,Caffeine初始化,添加缓存,获取缓存,更新缓存,删除缓存,清空缓存等方法,已第三方包的方式存在,将项目打包到私仓中,在目标项目中引入Caffeine的pom地址就可以使用

    框架及基类

    比如,AndroidUtil可能包含了与Android系统API交互的便捷函数,CacheUtil可能负责数据缓存的操作,DateUtil则可能处理日期和时间的格式化和计算。 CacheUtil在许多应用中是必不可少的,它可以帮助我们高效地存储和...

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

    Log.w("CacheUtil", "Failed to get external cache directory"); return null; } } ``` 2. **读取缓存文件** 读取缓存文件可以使用`FileInputStream`和`BufferedReader`来实现,将文件内容读取为字符串: ...

    Utility基础类大全.zip_Q98_c#工具类_c#通用类_happenedm1i_untlity

    10. **缓存管理**:`CacheUtil`可能实现了简单的内存缓存机制,帮助开发者快速存储和检索数据。 11. **日志记录**:`LogUtil`类可以提供统一的日志记录接口,便于调试和监控程序运行状态。 12. **异常处理**:`...

    Utility基础类大全_CN.rar

    10. **缓存管理**: CacheUtil可能提供了内存缓存、分布式缓存的接口,帮助开发者快速存取数据,提高程序性能。 以上这些工具类通常都是经过优化和测试的,可以极大地提升开发效率和代码质量。在实际项目中,开发者...

    J2Cache.pdf

    ### J2Cache 两级缓存框架详解 #### 引言 在现代软件开发尤其是Web应用领域,缓存技术被广泛采用以提升应用性能并减轻后端数据库的压力。J2Cache作为一个高效的缓存解决方案,旨在通过两级缓存机制提高数据访问...

    一个关于ehcache的项目

    - `CacheUtil.java`:工具类,封装了Ehcache的基本操作,如缓存的get和put方法。 - `TestCache.java`:测试类,演示如何使用Ehcache缓存数据。 通过分析这些文件,你可以了解到Ehcache在实际项目中的使用方式,如何...

    xutil 安卓框架 教程

    利用CacheUtil类,开发者可以方便地存储和获取包含中文的数据,无需担心编码转换的问题。 五、自动上传文件 与下载功能类似,xutil同样提供了文件上传的接口。UploadUtil类可以方便地实现文件上传操作,支持多文件...

    SpringMVC可以用的工具类

    9. **缓存工具类**:`CacheUtil`可以帮助管理缓存,例如使用 Ehcache 或 Redis,减少数据库访问,提升性能。 10. **安全工具类**:`SecurityUtil`涉及密码加密、解密,权限验证等功能,确保用户数据的安全。 在...

    Hutool的api等可参考的文档

    - **缓存**:`CacheUtil`提供了多种缓存策略,如FIFO、LFU、LRU等。 - **加密解密**:`SecureUtil`包含对称、非对称加密,以及摘要、签名和国密算法。 - **DFA查找**:`Dfa`实现确定有限自动机的查找算法。 - **...

    Android代码-afinal框架实现图片的简单异步缓存加载.rar

    在具体实现上,Afinal提供了一些关键类和方法,例如`ImageLoader`用于图片加载,`CacheUtil`负责缓存管理,`FileUtil`提供文件操作等。开发者可以通过`ImageLoader.displayImage()`方法指定图片的URL和目标ImageView...

    Android开发常见的136个工具类.rar

    14. 缓存管理工具类(CacheUtil):包括内存缓存和磁盘缓存的管理,提高数据加载速度。 15. 视图操作工具类(ViewUtil):方便设置视图属性,如设置背景、尺寸、边距等。 16. 系统信息获取工具类(SystemUtil):获取...

    百度定位信息存储

    CacheUtil.cacheList(getApplicationContext(), list, "LocationList"); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } if (location.getLocType() =...

    Hutool 参考文档.pdf

    静态调用日志(StaticLog)、缓存(Hutool-cache)、缓存工具(CacheUtil)和缓存策略(如FIFOCache、LFUCache、LRUCache、TimedCache、WeakCache和FileCache)为应用程序中的缓存管理提供了便利。 JSON(Hutool-...

Global site tag (gtag.js) - Google Analytics