package com.xxl.job.admin.core.util; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentMap; /** * local cache tool * * @author xuxueli 2018-01-22 21:37:34 */ public class LocalCacheUtil { private static ConcurrentMap cacheRepository = new ConcurrentHashMap(); // 类型建议用抽象父类,兼容性更好; private static class LocalCacheData{ private String key; private Object val; private long timeoutTime; public LocalCacheData() { } public LocalCacheData(String key, Object val, long timeoutTime) { this.key = key; this.val = val; this.timeoutTime = timeoutTime; } public String getKey() { return key; } public void setKey(String key) { this.key = key; } public Object getVal() { return val; } public void setVal(Object val) { this.val = val; } public long getTimeoutTime() { return timeoutTime; } public void setTimeoutTime(long timeoutTime) { this.timeoutTime = timeoutTime; } } /** * set cache * * @param key * @param val * @param cacheTime * @return */ public static boolean set(String key, Object val, long cacheTime){ // clean timeout cache, before set new cache (avoid cache too much) cleanTimeoutCache(); // set new cache if (key==null || key.trim().length()==0) { return false; } if (val == null) { remove(key); } if (cacheTime <= 0) { remove(key); } long timeoutTime = System.currentTimeMillis() + cacheTime; LocalCacheData localCacheData = new LocalCacheData(key, val, timeoutTime); cacheRepository.put(localCacheData.getKey(), localCacheData); return true; } /** * remove cache * * @param key * @return */ public static boolean remove(String key){ if (key==null || key.trim().length()==0) { return false; } cacheRepository.remove(key); return true; } /** * get cache * * @param key * @return */ public static Object get(String key){ if (key==null || key.trim().length()==0) { return null; } LocalCacheData localCacheData = cacheRepository.get(key); if (localCacheData!=null && System.currentTimeMillis()=localCacheData.getTimeoutTime()) { cacheRepository.remove(key); } } } return true; } }