当前位置: 首页 > 工具软件 > MyCache > 使用案例 >

缓存工具类MyCacheUtil

柯国安
2023-12-01

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 {

	// 测试缓存对象
	@Test
	public 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文件内容
		@Test
		public 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();
			}
			
		}

}


 类似资料: