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()) { return localCacheData.getVal(); } else { remove(key); return null; } } /** * clean timeout cache * * @return */ public static boolean cleanTimeoutCache() { if (!cacheRepository.keySet().isEmpty()) { for (String key : cacheRepository.keySet()) { LocalCacheData localCacheData = cacheRepository.get(key); if (localCacheData != null && System.currentTimeMillis() >= localCacheData.getTimeoutTime()) { cacheRepository.remove(key); } } } return true; } }