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】是针对Android开发中的缓存管理工具类,它集成了多种常见的缓存机制,如ACache、Data Cache、SharedPreferences (SP)等,并且扩展了SP以支持存储列表数据,大大简化了开发者在处理缓存时的工作。...
这个名为“《项目可用》CacheUtil缓存工具类.rar”的压缩包文件显然包含了一个用于Java项目的缓存管理工具类,帮助开发者高效地存储和检索数据。以下是对这个工具类可能涉及的关键知识点的详细解释: 1. **Java ...
CacheUtil.java用java语言实现在java项目开发过程中,对缓存进行管理的工具类
例如,可以使用 CacheUtil.clear() 方法清除缓存中的数据,或者使用 CacheUtil.containsKey() 方法检查缓存中是否存在某个键。 缓存数据的相关技术 缓存数据的相关技术包括缓存服务器、缓存算法、缓存协议等。例如...
工具包中包含,Caffeine初始化,添加缓存,获取缓存,更新缓存,删除缓存,清空缓存等方法,已第三方包的方式存在,将项目打包到私仓中,在目标项目中引入Caffeine的pom地址就可以使用
比如,AndroidUtil可能包含了与Android系统API交互的便捷函数,CacheUtil可能负责数据缓存的操作,DateUtil则可能处理日期和时间的格式化和计算。 CacheUtil在许多应用中是必不可少的,它可以帮助我们高效地存储和...
Log.w("CacheUtil", "Failed to get external cache directory"); return null; } } ``` 2. **读取缓存文件** 读取缓存文件可以使用`FileInputStream`和`BufferedReader`来实现,将文件内容读取为字符串: ...
10. **缓存管理**:`CacheUtil`可能实现了简单的内存缓存机制,帮助开发者快速存储和检索数据。 11. **日志记录**:`LogUtil`类可以提供统一的日志记录接口,便于调试和监控程序运行状态。 12. **异常处理**:`...
10. **缓存管理**: CacheUtil可能提供了内存缓存、分布式缓存的接口,帮助开发者快速存取数据,提高程序性能。 以上这些工具类通常都是经过优化和测试的,可以极大地提升开发效率和代码质量。在实际项目中,开发者...
### J2Cache 两级缓存框架详解 #### 引言 在现代软件开发尤其是Web应用领域,缓存技术被广泛采用以提升应用性能并减轻后端数据库的压力。J2Cache作为一个高效的缓存解决方案,旨在通过两级缓存机制提高数据访问...
- `CacheUtil.java`:工具类,封装了Ehcache的基本操作,如缓存的get和put方法。 - `TestCache.java`:测试类,演示如何使用Ehcache缓存数据。 通过分析这些文件,你可以了解到Ehcache在实际项目中的使用方式,如何...
利用CacheUtil类,开发者可以方便地存储和获取包含中文的数据,无需担心编码转换的问题。 五、自动上传文件 与下载功能类似,xutil同样提供了文件上传的接口。UploadUtil类可以方便地实现文件上传操作,支持多文件...
9. **缓存工具类**:`CacheUtil`可以帮助管理缓存,例如使用 Ehcache 或 Redis,减少数据库访问,提升性能。 10. **安全工具类**:`SecurityUtil`涉及密码加密、解密,权限验证等功能,确保用户数据的安全。 在...
- **缓存**:`CacheUtil`提供了多种缓存策略,如FIFO、LFU、LRU等。 - **加密解密**:`SecureUtil`包含对称、非对称加密,以及摘要、签名和国密算法。 - **DFA查找**:`Dfa`实现确定有限自动机的查找算法。 - **...
在具体实现上,Afinal提供了一些关键类和方法,例如`ImageLoader`用于图片加载,`CacheUtil`负责缓存管理,`FileUtil`提供文件操作等。开发者可以通过`ImageLoader.displayImage()`方法指定图片的URL和目标ImageView...
14. 缓存管理工具类(CacheUtil):包括内存缓存和磁盘缓存的管理,提高数据加载速度。 15. 视图操作工具类(ViewUtil):方便设置视图属性,如设置背景、尺寸、边距等。 16. 系统信息获取工具类(SystemUtil):获取...
CacheUtil.cacheList(getApplicationContext(), list, "LocationList"); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } if (location.getLocType() =...
静态调用日志(StaticLog)、缓存(Hutool-cache)、缓存工具(CacheUtil)和缓存策略(如FIFOCache、LFUCache、LRUCache、TimedCache、WeakCache和FileCache)为应用程序中的缓存管理提供了便利。 JSON(Hutool-...