|
@@ -1,149 +1,149 @@
|
|
-package com.qmth.sop.business.util;
|
|
|
|
-
|
|
|
|
-import com.alibaba.fastjson.JSONArray;
|
|
|
|
-import com.alibaba.fastjson.JSONObject;
|
|
|
|
-import com.github.benmanes.caffeine.cache.Cache;
|
|
|
|
-import com.github.benmanes.caffeine.cache.Caffeine;
|
|
|
|
-import com.github.benmanes.caffeine.cache.Expiry;
|
|
|
|
-import org.checkerframework.checker.index.qual.NonNegative;
|
|
|
|
-import org.checkerframework.checker.nullness.qual.NonNull;
|
|
|
|
-import org.slf4j.Logger;
|
|
|
|
-import org.slf4j.LoggerFactory;
|
|
|
|
-
|
|
|
|
-import java.util.Collection;
|
|
|
|
-import java.util.Map;
|
|
|
|
-import java.util.concurrent.TimeUnit;
|
|
|
|
-
|
|
|
|
-import static java.util.Objects.isNull;
|
|
|
|
-
|
|
|
|
-/**
|
|
|
|
- * @Description: CAFFEINE缓存工具类
|
|
|
|
- * @Param:
|
|
|
|
- * @return:
|
|
|
|
- * @Author: wangliang
|
|
|
|
- * @Date: 2023/12/27
|
|
|
|
- */
|
|
|
|
-public class CacheUtil {
|
|
|
|
-
|
|
|
|
- private final static Logger log = LoggerFactory.getLogger(CacheUtil.class);
|
|
|
|
-
|
|
|
|
- /**
|
|
|
|
- * 不设置过期时长
|
|
|
|
- */
|
|
|
|
- public static final long NOT_EXPIRE = Long.MAX_VALUE;
|
|
|
|
-
|
|
|
|
- public static final Cache<String, CacheObject<?>> CAFFEINE = Caffeine.newBuilder()
|
|
|
|
- .expireAfter(new Expiry<String, CacheObject<?>>() {
|
|
|
|
-
|
|
|
|
- @Override
|
|
|
|
- public long expireAfterCreate(@NonNull String key, @NonNull CacheObject<?> value, long currentTime) {
|
|
|
|
- return value.expire;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- @Override
|
|
|
|
- public long expireAfterUpdate(@NonNull String key, @NonNull CacheObject<?> value, long currentTime,
|
|
|
|
- @NonNegative long currentDuration) {
|
|
|
|
- return value.expire;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- @Override
|
|
|
|
- public long expireAfterRead(@NonNull String key, @NonNull CacheObject<?> value, long currentTime,
|
|
|
|
- @NonNegative long currentDuration) {
|
|
|
|
- return value.expire;
|
|
|
|
- }
|
|
|
|
- }).initialCapacity(100).maximumSize(1024).build();
|
|
|
|
-
|
|
|
|
- private static class CacheObject<T> {
|
|
|
|
-
|
|
|
|
- T data;
|
|
|
|
-
|
|
|
|
- long expire;
|
|
|
|
-
|
|
|
|
- public CacheObject(T data, long second) {
|
|
|
|
- this.data = data;
|
|
|
|
- this.expire = TimeUnit.SECONDS.toNanos(second);
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- public static <T> void set(String key, T value, long expire) {
|
|
|
|
- CacheObject<T> cacheObject = new CacheObject<>(value, expire);
|
|
|
|
- CAFFEINE.put(key, cacheObject);
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- public static void set(String key, Object value) {
|
|
|
|
- set(key, value, NOT_EXPIRE);
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- @SuppressWarnings("unchecked")
|
|
|
|
- public static <T> T get(String key) {
|
|
|
|
- CacheObject<?> cacheObject = CAFFEINE.getIfPresent(key);
|
|
|
|
- if (isNull(cacheObject)) {
|
|
|
|
- return null;
|
|
|
|
- }
|
|
|
|
- return (T) cacheObject.data;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- public static void delete(String key) {
|
|
|
|
- CAFFEINE.invalidate(key);
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- public static void delete(Collection<String> keys) {
|
|
|
|
- CAFFEINE.invalidateAll(keys);
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- public static JSONArray getAll() {
|
|
|
|
- Map map = CAFFEINE.asMap();
|
|
|
|
- JSONArray jsonArray = new JSONArray();
|
|
|
|
- for (Object key : map.keySet()) {
|
|
|
|
- CacheObject cacheObject = (CacheObject) map.get(key);
|
|
|
|
- JSONObject jsonObject = new JSONObject();
|
|
|
|
- jsonObject.put(key.toString(), cacheObject.data + ";" + TimeUnit.SECONDS.toMinutes(cacheObject.expire));
|
|
|
|
- jsonArray.add(jsonObject);
|
|
|
|
- }
|
|
|
|
- return jsonArray;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- // public static void main(String[] args) throws InterruptedException {
|
|
|
|
- // CacheUtil.set("A", 1, 2 * 60);
|
|
|
|
- // CacheUtil.set("B", 2, 5 * 60);
|
|
|
|
- // CacheUtil.set("C", 3, 8 * 60);
|
|
|
|
- //
|
|
|
|
- // Map map = CAFFEINE.asMap();
|
|
|
|
- // for (Object key : map.keySet()) {
|
|
|
|
- // CacheObject cacheObject = (CacheObject) map.get(key);
|
|
|
|
- // System.out.println(key + "," + cacheObject.data + "," + TimeUnit.SECONDS.toMinutes(cacheObject.expire));
|
|
|
|
- // }
|
|
|
|
- // Object a = CacheUtil.get("A");
|
|
|
|
- // Object b = CacheUtil.get("B");
|
|
|
|
- // Object c = CacheUtil.get("C");
|
|
|
|
- // System.out.println(a);
|
|
|
|
- // System.out.println(b);
|
|
|
|
- // System.out.println(c);
|
|
|
|
- // System.out.println("-----------------");
|
|
|
|
- // Thread.sleep(2000);
|
|
|
|
- //
|
|
|
|
- // a = CacheUtil.get("A");
|
|
|
|
- // b = CacheUtil.get("B");
|
|
|
|
- // c = CacheUtil.get("C");
|
|
|
|
- // System.out.println(a);
|
|
|
|
- // System.out.println(b);
|
|
|
|
- // System.out.println(c);
|
|
|
|
- // System.out.println("-----------------");
|
|
|
|
- // Thread.sleep(5000);
|
|
|
|
- // a = CacheUtil.get("A");
|
|
|
|
- // b = CacheUtil.get("B");
|
|
|
|
- // c = CacheUtil.get("C");
|
|
|
|
- // System.out.println(a);
|
|
|
|
- // System.out.println(b);
|
|
|
|
- // System.out.println(c);
|
|
|
|
- // System.out.println("-----------------");
|
|
|
|
- // Thread.sleep(1000 * 120);
|
|
|
|
- // a = CacheUtil.get("A");
|
|
|
|
- // b = CacheUtil.get("B");
|
|
|
|
- // c = CacheUtil.get("C");
|
|
|
|
- // System.out.println(a);
|
|
|
|
- // System.out.println(b);
|
|
|
|
- // System.out.println(c);
|
|
|
|
- // System.out.println("-----------------");
|
|
|
|
- // }
|
|
|
|
-}
|
|
|
|
|
|
+//package com.qmth.sop.business.util;
|
|
|
|
+//
|
|
|
|
+//import com.alibaba.fastjson.JSONArray;
|
|
|
|
+//import com.alibaba.fastjson.JSONObject;
|
|
|
|
+//import com.github.benmanes.caffeine.cache.Cache;
|
|
|
|
+//import com.github.benmanes.caffeine.cache.Caffeine;
|
|
|
|
+//import com.github.benmanes.caffeine.cache.Expiry;
|
|
|
|
+//import org.checkerframework.checker.index.qual.NonNegative;
|
|
|
|
+//import org.checkerframework.checker.nullness.qual.NonNull;
|
|
|
|
+//import org.slf4j.Logger;
|
|
|
|
+//import org.slf4j.LoggerFactory;
|
|
|
|
+//
|
|
|
|
+//import java.util.Collection;
|
|
|
|
+//import java.util.Map;
|
|
|
|
+//import java.util.concurrent.TimeUnit;
|
|
|
|
+//
|
|
|
|
+//import static java.util.Objects.isNull;
|
|
|
|
+//
|
|
|
|
+///**
|
|
|
|
+// * @Description: CAFFEINE缓存工具类
|
|
|
|
+// * @Param:
|
|
|
|
+// * @return:
|
|
|
|
+// * @Author: wangliang
|
|
|
|
+// * @Date: 2023/12/27
|
|
|
|
+// */
|
|
|
|
+//public class CacheUtil {
|
|
|
|
+//
|
|
|
|
+// private final static Logger log = LoggerFactory.getLogger(CacheUtil.class);
|
|
|
|
+//
|
|
|
|
+// /**
|
|
|
|
+// * 不设置过期时长
|
|
|
|
+// */
|
|
|
|
+// public static final long NOT_EXPIRE = Long.MAX_VALUE;
|
|
|
|
+//
|
|
|
|
+// public static final Cache<String, CacheObject<?>> CAFFEINE = Caffeine.newBuilder()
|
|
|
|
+// .expireAfter(new Expiry<String, CacheObject<?>>() {
|
|
|
|
+//
|
|
|
|
+// @Override
|
|
|
|
+// public long expireAfterCreate(@NonNull String key, @NonNull CacheObject<?> value, long currentTime) {
|
|
|
|
+// return value.expire;
|
|
|
|
+// }
|
|
|
|
+//
|
|
|
|
+// @Override
|
|
|
|
+// public long expireAfterUpdate(@NonNull String key, @NonNull CacheObject<?> value, long currentTime,
|
|
|
|
+// @NonNegative long currentDuration) {
|
|
|
|
+// return value.expire;
|
|
|
|
+// }
|
|
|
|
+//
|
|
|
|
+// @Override
|
|
|
|
+// public long expireAfterRead(@NonNull String key, @NonNull CacheObject<?> value, long currentTime,
|
|
|
|
+// @NonNegative long currentDuration) {
|
|
|
|
+// return value.expire;
|
|
|
|
+// }
|
|
|
|
+// }).initialCapacity(100).maximumSize(1024).build();
|
|
|
|
+//
|
|
|
|
+// private static class CacheObject<T> {
|
|
|
|
+//
|
|
|
|
+// T data;
|
|
|
|
+//
|
|
|
|
+// long expire;
|
|
|
|
+//
|
|
|
|
+// public CacheObject(T data, long second) {
|
|
|
|
+// this.data = data;
|
|
|
|
+// this.expire = TimeUnit.SECONDS.toNanos(second);
|
|
|
|
+// }
|
|
|
|
+// }
|
|
|
|
+//
|
|
|
|
+// public static <T> void set(String key, T value, long expire) {
|
|
|
|
+// CacheObject<T> cacheObject = new CacheObject<>(value, expire);
|
|
|
|
+// CAFFEINE.put(key, cacheObject);
|
|
|
|
+// }
|
|
|
|
+//
|
|
|
|
+// public static void set(String key, Object value) {
|
|
|
|
+// set(key, value, NOT_EXPIRE);
|
|
|
|
+// }
|
|
|
|
+//
|
|
|
|
+// @SuppressWarnings("unchecked")
|
|
|
|
+// public static <T> T get(String key) {
|
|
|
|
+// CacheObject<?> cacheObject = CAFFEINE.getIfPresent(key);
|
|
|
|
+// if (isNull(cacheObject)) {
|
|
|
|
+// return null;
|
|
|
|
+// }
|
|
|
|
+// return (T) cacheObject.data;
|
|
|
|
+// }
|
|
|
|
+//
|
|
|
|
+// public static void delete(String key) {
|
|
|
|
+// CAFFEINE.invalidate(key);
|
|
|
|
+// }
|
|
|
|
+//
|
|
|
|
+// public static void delete(Collection<String> keys) {
|
|
|
|
+// CAFFEINE.invalidateAll(keys);
|
|
|
|
+// }
|
|
|
|
+//
|
|
|
|
+// public static JSONArray getAll() {
|
|
|
|
+// Map map = CAFFEINE.asMap();
|
|
|
|
+// JSONArray jsonArray = new JSONArray();
|
|
|
|
+// for (Object key : map.keySet()) {
|
|
|
|
+// CacheObject cacheObject = (CacheObject) map.get(key);
|
|
|
|
+// JSONObject jsonObject = new JSONObject();
|
|
|
|
+// jsonObject.put(key.toString(), cacheObject.data + ";" + TimeUnit.SECONDS.toMinutes(cacheObject.expire));
|
|
|
|
+// jsonArray.add(jsonObject);
|
|
|
|
+// }
|
|
|
|
+// return jsonArray;
|
|
|
|
+// }
|
|
|
|
+//
|
|
|
|
+// // public static void main(String[] args) throws InterruptedException {
|
|
|
|
+// // CacheUtil.set("A", 1, 2 * 60);
|
|
|
|
+// // CacheUtil.set("B", 2, 5 * 60);
|
|
|
|
+// // CacheUtil.set("C", 3, 8 * 60);
|
|
|
|
+// //
|
|
|
|
+// // Map map = CAFFEINE.asMap();
|
|
|
|
+// // for (Object key : map.keySet()) {
|
|
|
|
+// // CacheObject cacheObject = (CacheObject) map.get(key);
|
|
|
|
+// // System.out.println(key + "," + cacheObject.data + "," + TimeUnit.SECONDS.toMinutes(cacheObject.expire));
|
|
|
|
+// // }
|
|
|
|
+// // Object a = CacheUtil.get("A");
|
|
|
|
+// // Object b = CacheUtil.get("B");
|
|
|
|
+// // Object c = CacheUtil.get("C");
|
|
|
|
+// // System.out.println(a);
|
|
|
|
+// // System.out.println(b);
|
|
|
|
+// // System.out.println(c);
|
|
|
|
+// // System.out.println("-----------------");
|
|
|
|
+// // Thread.sleep(2000);
|
|
|
|
+// //
|
|
|
|
+// // a = CacheUtil.get("A");
|
|
|
|
+// // b = CacheUtil.get("B");
|
|
|
|
+// // c = CacheUtil.get("C");
|
|
|
|
+// // System.out.println(a);
|
|
|
|
+// // System.out.println(b);
|
|
|
|
+// // System.out.println(c);
|
|
|
|
+// // System.out.println("-----------------");
|
|
|
|
+// // Thread.sleep(5000);
|
|
|
|
+// // a = CacheUtil.get("A");
|
|
|
|
+// // b = CacheUtil.get("B");
|
|
|
|
+// // c = CacheUtil.get("C");
|
|
|
|
+// // System.out.println(a);
|
|
|
|
+// // System.out.println(b);
|
|
|
|
+// // System.out.println(c);
|
|
|
|
+// // System.out.println("-----------------");
|
|
|
|
+// // Thread.sleep(1000 * 120);
|
|
|
|
+// // a = CacheUtil.get("A");
|
|
|
|
+// // b = CacheUtil.get("B");
|
|
|
|
+// // c = CacheUtil.get("C");
|
|
|
|
+// // System.out.println(a);
|
|
|
|
+// // System.out.println(b);
|
|
|
|
+// // System.out.println(c);
|
|
|
|
+// // System.out.println("-----------------");
|
|
|
|
+// // }
|
|
|
|
+//}
|