import java.util.Calendar;
import java.util.HashMap;
import java.util.Hashtable;
public class CacheHelper {
public final static int default_interval_second = 20;
public static boolean ISDEBUG = true;
private static HashMap map = new HashMap();
private static Object obj = new Object();
public static ICache getCache(String uniquekey) {
synchronized (obj) {
ICache ic = (ICache) map.get(uniquekey);
if (ic == null) {
ic = new CacheEntity(uniquekey);
map.put(uniquekey, ic);
}
return ic;
}
}
public interface ICache {
Object get();
Object get(long timestamp);
void set(Object obj);
void set(long timestamp, Object obj);
void clear(String regx);
void clearAll();
}
private static class CacheEntity implements ICache {
private Hashtable hm = new Hashtable();
private Object uniquekey = this;
private long timestamp = Long.MIN_VALUE;
public CacheEntity(Object uniquekey) {
this.uniquekey = uniquekey;
}
public Object get(long timestamp) {
if (timestamp <= this.timestamp) {
// 当前时间在设定的过期时间之前,表示还没有过期。
// 如果还没过期,那么就返回。
Object obj = hm.get(uniquekey);
if (ISDEBUG && obj != null) {
// 输出日志。
System.out.println("[" + timestamp + "][Reading cache][" + uniquekey + "]...");
}
return obj;
}
else {
// 清理垃圾。
hm.remove(uniquekey);
return null;
}
}
public void set(long timestamp, Object obj) {
this.timestamp = timestamp;
hm.put(uniquekey, obj);
}
public Object get() {
Calendar cal = Calendar.getInstance();
return get(cal.getTimeInMillis());
}
public void set(Object obj) {
Calendar cal = Calendar.getInstance();
cal.add(Calendar.SECOND, default_interval_second);
set(cal.getTimeInMillis(), obj);
}
public void clear(String regx) {
java.util.Enumeration keys = hm.keys();
while (keys.hasMoreElements()) {
String key = (String) keys.nextElement();
if (key.matches(regx)) {
hm.remove(key);
}
}
}
public void clearAll() {
hm.clear();
}
}
}