MyCacheUtil.java

package com.sunrise.jop.common.util;import java.io.File;
import java.sql.Timestamp;
import java.util.HashMap;
import java.util.Map;import test.TestHello;/*** 缓存工具类* */
public class MyCacheUtil {private static final int CACHE_TIME = 1000 * 5 ; //默认缓存 1分钟private static Map<String,MyCache> cacheMap = new HashMap<String,MyCache>();/*** 缓存properties文件内容* filename properties的路径* key为properties中所取字段的key* isForever 是否永久保存* time有效时间 ,为null取默认时间(1分钟)* */public static Object propertiesCache(String filename, String key,boolean isForever,Integer time){String mapKey = filename+File.separator+key;Timestamp nowTime = MyTimeUtil.getNowTime();if( cacheMap.containsKey(mapKey) ){MyCache cache = cacheMap.get(mapKey);if(cache.isForever()==true){return cache.getObject();}else{if( cache.getDestroyTime() > nowTime.getTime()){ //未失效return cache.getObject();}}}String result = PropertiesUtil.getProp(filename, key);Timestamp destroyTime = null;if(time==null||time<=0){destroyTime = MyTimeUtil.getNextTime(nowTime, CACHE_TIME);}else{destroyTime = MyTimeUtil.getNextTime(nowTime, time);}MyCache cache = new MyCache(result,isForever,destroyTime.getTime());cacheMap.put(mapKey, cache);return result;}/*** 缓存对象* clazz为缓存的对象* isForever是否永久缓存对象* time有效时间 ,为null取默认时间(1分钟)* @throws ClassNotFoundException * */public static Object objectCache(Class clazz,boolean isForever,Integer time) throws ClassNotFoundException{if(clazz==null) return null;String mapKey =  clazz.getName();Timestamp nowTime = MyTimeUtil.getNowTime();if( cacheMap.containsKey(mapKey) ){MyCache cache = cacheMap.get(mapKey);if(cache.isForever()==true){return cache.getObject();}   else if( cache.getDestroyTime() > nowTime.getTime()){ //未失效return cache.getObject();}}Object object = null;try {object = Class.forName(clazz.getName()).newInstance();} catch (Exception e) {e.printStackTrace();} Timestamp destroyTime = null;if(time==null||time<=0){destroyTime = MyTimeUtil.getNextTime(nowTime, CACHE_TIME);}else{destroyTime = MyTimeUtil.getNextTime(nowTime, time);}MyCache cache = new MyCache(object,isForever,destroyTime.getTime());cacheMap.put(mapKey, cache);return object;}}

MyTimeUtil.java

package com.sunrise.jop.common.util;import java.sql.Timestamp;
import java.util.Calendar;
import java.util.Date;/*** 时间工具类* */
public class MyTimeUtil {//得到现在时间public static Timestamp  getNowTime(){return new Timestamp(new Date().getTime());}/**  * 得到下一个时间  * currentTime 当前时间  * interval 时间间隔(毫秒)  * */  public static Timestamp getNextTime(Timestamp currentTime,int interval){  if(currentTime == null) return null;  int intervalSecond = interval / 1000;  Calendar calendar = Calendar.getInstance();  calendar.setTime(new Date(currentTime.getTime()));  calendar.add(Calendar.SECOND, intervalSecond);  return new Timestamp(calendar.getTimeInMillis() );  }//}

MyCache.java

package com.sunrise.jop.common.util;/*** 缓存类* */class MyCache{private boolean isForever ;//是否永久private long destroyTime; //销毁时间private Object object; //缓存的对象public MyCache(Object object,  boolean isForever,long destroyTime) {this.isForever = isForever;this.destroyTime = destroyTime;this.object = object;}public long getDestroyTime() {return destroyTime;}public void setDestroyTime(long destroyTime) {this.destroyTime = destroyTime;}public Object getObject() {return object;}public void setObject(Object object) {this.object = object;}public boolean isForever() {return isForever;}public void setForever(boolean isForever) {this.isForever = isForever;}}

TestMyCache.java

package test;import static org.junit.Assert.*;import org.junit.Test;import com.sunrise.jop.common.util.MyCacheUtil;public class TestMyCache {// 测试缓存对象@Testpublic void testObjectCache() {try{TestHello testHello = (TestHello) MyCacheUtil.objectCache(TestHello.class, false,null);System.out.println("testHello1 = "+ testHello);testHello = (TestHello) MyCacheUtil.objectCache(TestHello.class, false,null);System.out.println("testHello2 = "+ testHello);Thread.sleep(1000*5*2);testHello = (TestHello) MyCacheUtil.objectCache(TestHello.class,false, null);System.out.println("testHello3 = "+ testHello);}catch(Exception e){e.printStackTrace(); }}// 测试缓存properties文件内容@Testpublic void testPropertiesCache() {try{String filename = "email.properties";String key = "smtpHostName";Object value = MyCacheUtil.propertiesCache(filename, key, false, null);System.out.println("value1 = " + value+"   "+value.toString());value = MyCacheUtil.propertiesCache(filename, key, false, null);System.out.println("value1 = " + value+"   "+value.toString());Thread.sleep(1000*5*2);value = MyCacheUtil.propertiesCache(filename, key, false, null);System.out.println("value1 = " + value+"   "+value.toString());}catch(Exception e){e.printStackTrace();}}}

缓存工具类MyCacheUtil相关推荐

  1. Java 缓存工具类 Cache

    Java 缓存工具类 Cache 工具类定义 工具类定义 package com.demo.utils;import org.springframework.util.StringUtils;impo ...

  2. android 图片缓存工具类,Android工具类系列-Glide图片缓存与圆角

    Glide的图片缓存和清除图片缓存 public class GlideCacheUtil { private static GlideCacheUtil inst; public static Gl ...

  3. java redis缓存工具类_redis工具类-JedisUtil

    redis连接的工具类 1.java中的redis java中,使用redis不会将其当作数据库来使用,更多的是作为缓存或者是消息中间件来使用.在用作缓存时,我们需要使用第三方提供的jar包来进行开发 ...

  4. TimedCache 带时间缓存工具类,附加监听回调 | Java工具类

    目录 简述 Maven依赖 简单使用 工具优化-监听过期.增加回调 总结 简述 我们在工作中会碰到需要使用带过期时间的缓存场景.但是使用redis有太重了,毕竟缓存的数据很小,放在内存够够的.huto ...

  5. Redis存储缓存工具类简单封装

    一.公共实体类 (1)User.java package cn.xiyou.entity;import java.io.Serializable;/*** User实体* * @author XIOA ...

  6. LruDiskCache要点--不可不用的磁盘缓存工具类

    LruDiskCache是使用Lru算法的磁盘缓存类,它的功能是将LruCache中缓存位置由内存改为磁盘,一般两者结合使用,用于对处理小文件,图片的缓存. 下面记录下阅读过程中几个比较重要的点: G ...

  7. js 浏览器缓存 手写缓存工具类

    浏览器缓存 数据存储在浏览器内存中,不会被页面刷新消失,存储量有大小限制,不过实在开发中,合理的应用已经可以满足绝大缓存需求 sessionStorage 会话级别 关闭窗口则自动清除 localSt ...

  8. java redis缓存工具类_util: 对日常工作中常见的工具类进行打包: 1、数据库:DBUtil工具类 2、Redis缓存:JedisUtil工具类...

    /** * 功能:使用原始SQL查询单条记录 * 返回每条记录封装到Map */ public static void demo1_1() { DBUtil db = new DBUtil(); tr ...

  9. 【工具篇】使用concurrentHashMap实现缓存工具类

最新文章

  1. python java web_Python 与 Java 使用 websocket 通信
  2. SAP Smart Business design time = CDS view SADL
  3. 批量杀死MySQL连接的几种方法
  4. PC端动态视频背景引导页(非自适应)
  5. adnroid中LayoutParams的简单总结
  6. qmc0文件怎么转换mp3_怎么用手机把手机里的视频转换成mp3音乐?(手机,不是电脑)...
  7. 日志分析工具、日志管理系统、syslog分析
  8. 内存映射机制(mmap)
  9. 医院信息化服务器配置,医院信息化建设方案(完整).doc
  10. python2个子线程等待_Python的并发并行[1] - 线程[3] - 多线程的同步控制
  11. 双显示器 启动黑屏 黑苹果_黑苹果开机加载黑屏
  12. C语言字母排序不分大小写,求助C语言字母不分大小写排序
  13. 几种常用内存管理底层介绍
  14. ChatGPT 从入门到精通
  15. cad 打开硬件加速卡_加速,连续变向,你以为是在说体育运动吗?其实我是在说CAD技巧...
  16. html表格突出显示,java-如何突出显示jtable单元格的文本?
  17. 2022-04-27 openshift集群kubelet中出现unable to fetch pod logs错误问题定位
  18. linux 将sda分区扩容
  19. C#中 out的使用
  20. 零基础解读ChatGPT:对人类未来工作是威胁还是帮助?

热门文章

  1. JDK14性能管理工具:jmap和jhat使用介绍
  2. Hyperledger Fabric基础知识
  3. java数组与C++数组的不同之处
  4. PAT甲级 -- 1103 Integer Factorization (30 分)
  5. 虚无主义还是怀疑论?
  6. Leecode240. 搜索二维矩阵 II——Leecode每日一题系列
  7. 某指令引用的内存不能为
  8. 各大型邮箱smtp服务器及端口收集:
  9. java与c/c++进行socket通信的一些问题
  10. PHP导出Excel环境,php怎么导出excel-使用php导出excel的教程 - 河东软件园