Forráskód Böngészése

UPDATE-添加guava 工具类

liyang 1 éve
szülő
commit
aeee6ed38a
1 módosított fájl, 50 hozzáadás és 0 törlés
  1. 50 0
      src/main/java/com/ywt/biz/common/util/CacheUtil.java

+ 50 - 0
src/main/java/com/ywt/biz/common/util/CacheUtil.java

@@ -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;
+    }
+
+}