|
@@ -0,0 +1,50 @@
|
|
|
+package com.ywt.biz.common.util;
|
|
|
+
|
|
|
+import com.google.common.cache.Cache;
|
|
|
+import com.google.common.cache.CacheBuilder;
|
|
|
+
|
|
|
+import java.util.concurrent.TimeUnit;
|
|
|
+
|
|
|
+/**
|
|
|
+ * Guava cache 工具类,主要用于提供单例 Cache 对象,便于缓存管理
|
|
|
+ * 由于 Guava cache 不支持在 runtime 修改 maxSize, expireTime 这些属性,只能初始化的时候指定。
|
|
|
+ * @author Walker
|
|
|
+ * Created on 2020/6/19
|
|
|
+ */
|
|
|
+public final class CacheUtil {
|
|
|
+
|
|
|
+ private static volatile Cache<String, Object> cache;
|
|
|
+ /**
|
|
|
+ * 用于初始化cache的参数及其缺省值
|
|
|
+ */
|
|
|
+ private static final int EXPIRE_TIME = 10;
|
|
|
+ private static final int DEFAULT_SIZE = 100;
|
|
|
+
|
|
|
+ private static final int MAX_SIZE = 100000;
|
|
|
+ /**
|
|
|
+ * 时间单位(分钟)
|
|
|
+ */
|
|
|
+ private static final TimeUnit timeUnit = TimeUnit.MINUTES;
|
|
|
+
|
|
|
+ public static Cache<String, Object> getInstance() {
|
|
|
+ if (cache == null) {
|
|
|
+ synchronized (CacheUtil.class) {
|
|
|
+ if (cache == null) {
|
|
|
+ cache = CacheBuilder.newBuilder()
|
|
|
+ //设置缓存容器的初始容量
|
|
|
+ .initialCapacity(DEFAULT_SIZE)
|
|
|
+ //缓存数据的最大条目
|
|
|
+ .maximumSize(MAX_SIZE)
|
|
|
+ //定时回收:缓存项在给定时间内没有被写访问(创建或覆盖),则回收。
|
|
|
+ .expireAfterWrite(EXPIRE_TIME, timeUnit)
|
|
|
+ //启用统计->统计缓存的命中率等
|
|
|
+ .recordStats()
|
|
|
+ //设置缓存的移除通知
|
|
|
+ .build();
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return cache;
|
|
|
+ }
|
|
|
+
|
|
|
+}
|