123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133 |
- 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<String, LocalCacheData> cacheRepository = new ConcurrentHashMap<String, LocalCacheData>(); // 类型建议用抽象父类,兼容性更好;
- 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;
- }
- }
|