Browse Source

支持自动清理预览文件及缓存

陈精华 5 years ago
parent
commit
cf1ee9c631

+ 2 - 0
jodconverter-web/src/main/conf/application.properties

@@ -27,6 +27,8 @@ spring.http.multipart.max-file-size=100MB
 #redis连接
 #spring.redisson.address = 192.168.1.204:6379
 #spring.redisson.password = xxx
+#缓存自动清理(每晚3点自动清理) true 为开启,注释掉或其他值都为关闭
+cache.clean = true
 
 #######################################可在运行时动态配置#######################################
 #文本类型,默认如下,可自定义添加

+ 5 - 1
jodconverter-web/src/main/java/cn/keking/service/cache/CacheService.java

@@ -20,7 +20,7 @@ public interface CacheService {
 
     void initPDFCachePool(Integer capacity);
     void initIMGCachePool(Integer capacity);
-    public void initPdfImagesCachePool(Integer capacity);
+    void initPdfImagesCachePool(Integer capacity);
     void putPDFCache(String key, String value);
     void putImgCache(String key, List<String> value);
     Map<String, String> getPDFCache();
@@ -30,7 +30,11 @@ public interface CacheService {
     Integer getPdfImageCache(String key);
     void putPdfImageCache(String pdfFilePath, int num);
 
+    void cleanCache();
+
     void addQueueTask(String url);
     String takeQueueTask() throws InterruptedException;
 
+
+
 }

+ 7 - 0
jodconverter-web/src/main/java/cn/keking/service/cache/impl/CacheServiceJDKImpl.java

@@ -116,6 +116,13 @@ public class CacheServiceJDKImpl implements CacheService {
         pdfImagesCache.put(pdfFilePath, num);
     }
 
+    @Override
+    public void cleanCache() {
+        initPDFCachePool(CacheService.DEFAULT_PDF_CAPACITY);
+        initIMGCachePool(CacheService.DEFAULT_IMG_CAPACITY);
+        initPdfImagesCachePool(CacheService.DEFAULT_PDFIMG_CAPACITY);
+    }
+
     @Override
     public void addQueueTask(String url) {
         blockingQueue.add(url);

+ 22 - 0
jodconverter-web/src/main/java/cn/keking/service/cache/impl/CacheServiceRedisImpl.java

@@ -94,6 +94,13 @@ public class CacheServiceRedisImpl implements CacheService {
         convertedList.fastPut(pdfFilePath, num);
     }
 
+    @Override
+    public void cleanCache() {
+        cleanPdfCache();
+        cleanImgCache();
+        cleanPdfImgCache();
+    }
+
     @Override
     public void addQueueTask(String url) {
         RBlockingQueue<String> queue = redissonClient.getBlockingQueue(FileConverQueueTask.queueTaskName);
@@ -105,4 +112,19 @@ public class CacheServiceRedisImpl implements CacheService {
         RBlockingQueue<String> queue = redissonClient.getBlockingQueue(FileConverQueueTask.queueTaskName);
         return queue.take();
     }
+
+    private void cleanPdfCache() {
+        RMapCache<String, String> pdfCache = redissonClient.getMapCache(REDIS_FILE_PREVIEW_PDF_KEY);
+        pdfCache.clear();
+    }
+
+    private void cleanImgCache() {
+        RMapCache<String, List<String>> imgCache = redissonClient.getMapCache(REDIS_FILE_PREVIEW_IMGS_KEY);
+        imgCache.clear();
+    }
+
+    private void cleanPdfImgCache() {
+        RMapCache<String, Integer> pdfImg = redissonClient.getMapCache(REDIS_FILE_PREVIEW_PDF_IMGS_KEY);
+        pdfImg.clear();
+    }
 }

+ 26 - 0
jodconverter-web/src/main/java/cn/keking/service/cache/impl/CacheServiceRocksDBImpl.java

@@ -179,6 +179,17 @@ public class CacheServiceRocksDBImpl implements CacheService {
         }
     }
 
+    @Override
+    public void cleanCache() {
+        try {
+            cleanPdfCache();
+            cleanImgCache();
+            cleanPdfImgCache();
+        } catch (IOException | RocksDBException e) {
+            LOGGER.error("Clean Cache Exception" + e);
+        }
+    }
+
     @Override
     public void addQueueTask(String url) {
         blockingQueue.add(url);
@@ -210,4 +221,19 @@ public class CacheServiceRocksDBImpl implements CacheService {
         bis.close();
         return obj;
     }
+
+    private void cleanPdfCache() throws IOException, RocksDBException {
+        Map<String, String> initPDFCache = new HashMap<>();
+        db.put(REDIS_FILE_PREVIEW_PDF_KEY.getBytes(), toByteArray(initPDFCache));
+    }
+
+    private void cleanImgCache() throws IOException, RocksDBException {
+        Map<String, List<String>> initIMGCache = new HashMap<>();
+        db.put(REDIS_FILE_PREVIEW_IMGS_KEY.getBytes(), toByteArray(initIMGCache));
+    }
+
+    private void cleanPdfImgCache() throws IOException, RocksDBException {
+        Map<String, Integer> initPDFIMGCache = new HashMap<>();
+        db.put(REDIS_FILE_PREVIEW_PDF_IMGS_KEY.getBytes(), toByteArray(initPDFIMGCache));
+    }
 }

+ 11 - 5
jodconverter-web/src/main/java/cn/keking/utils/DeleteFileUtil.java

@@ -1,8 +1,14 @@
 package cn.keking.utils;
 
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
 import java.io.File;
 
 public class DeleteFileUtil {
+
+    private static final Logger LOGGER = LoggerFactory.getLogger(DeleteFileUtil.class);
+
     /**
      * 删除单个文件
      *
@@ -15,14 +21,14 @@ public class DeleteFileUtil {
         // 如果文件路径所对应的文件存在,并且是一个文件,则直接删除
         if (file.exists() && file.isFile()) {
             if (file.delete()) {
-                System.out.println("删除单个文件" + fileName + "成功!");
+                LOGGER.info("删除单个文件" + fileName + "成功!");
                 return true;
             } else {
-                System.out.println("删除单个文件" + fileName + "失败!");
+                LOGGER.info("删除单个文件" + fileName + "失败!");
                 return false;
             }
         } else {
-            System.out.println("删除单个文件失败:" + fileName + "不存在!");
+            LOGGER.info("删除单个文件失败:" + fileName + "不存在!");
             return false;
         }
     }
@@ -43,7 +49,7 @@ public class DeleteFileUtil {
         File dirFile = new File(dir);
         // 如果dir对应的文件不存在,或者不是一个目录,则退出
         if ((!dirFile.exists()) || (!dirFile.isDirectory())) {
-            System.out.println("删除目录失败:" + dir + "不存在!");
+            LOGGER.info("删除目录失败:" + dir + "不存在!");
             return false;
         }
         boolean flag = true;
@@ -65,7 +71,7 @@ public class DeleteFileUtil {
             }
         }
         if (!flag) {
-            System.out.println("删除目录失败!");
+            LOGGER.info("删除目录失败!");
             return false;
         }
         return true;

+ 23 - 4
jodconverter-web/src/main/java/cn/keking/utils/ShedulerClean.java

@@ -1,15 +1,34 @@
 package cn.keking.utils;
 
 import cn.keking.config.ConfigConstants;
+import cn.keking.service.cache.CacheService;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.autoconfigure.condition.ConditionalOnExpression;
+import org.springframework.scheduling.annotation.Scheduled;
 import org.springframework.stereotype.Component;
 
+/**
+ * @auther: chenjh
+ * @since: 2019/6/11 7:45
+ */
 @Component
+@ConditionalOnExpression("'${cache.clean:false}'.equals('true')")
 public class ShedulerClean {
-    String fileDir = ConfigConstants.getFileDir();
 
-//    @Scheduled(cron = "0 0 23 * * ?")   //每晚23点执行一次
-    public void clean(){
-        System.out.println("执行一次清空文件夹");
+    private static final Logger LOGGER = LoggerFactory.getLogger(ShedulerClean.class);
+
+    @Autowired
+    private CacheService cacheService;
+
+    private String fileDir = ConfigConstants.getFileDir();
+
+    @Scheduled(cron = "0 0 3 * * ?")   //每晚3点执行一次
+    public void clean() {
+        LOGGER.info("Cache clean start");
+        cacheService.cleanCache();
         DeleteFileUtil.deleteDirectory(fileDir);
+        LOGGER.info("Cache clean end");
     }
 }