Explorar el Código

add cache getDefaultPaper

deason hace 5 años
padre
commit
74cf72e7e9

+ 19 - 1
examcloud-core-questions-service/src/main/java/cn/com/qmth/examcloud/core/questions/service/impl/ExtractConfigProviderServiceImpl.java

@@ -10,6 +10,7 @@ import cn.com.qmth.examcloud.core.questions.dao.*;
 import cn.com.qmth.examcloud.core.questions.dao.entity.*;
 import cn.com.qmth.examcloud.core.questions.service.*;
 import cn.com.qmth.examcloud.core.questions.service.bean.extract.ExtractConfigPaper;
+import cn.com.qmth.examcloud.core.questions.service.cache.Constants;
 import cn.com.qmth.examcloud.core.questions.service.config.UpYunProperty;
 import cn.com.qmth.examcloud.question.commons.core.paper.DefaultPaper;
 import cn.com.qmth.examcloud.question.commons.core.paper.DefaultQuestionGroup;
@@ -17,6 +18,7 @@ import cn.com.qmth.examcloud.question.commons.core.paper.DefaultQuestionStructur
 import cn.com.qmth.examcloud.question.commons.core.paper.DefaultQuestionUnitWrapper;
 import cn.com.qmth.examcloud.question.commons.core.question.QuestionType;
 import cn.com.qmth.examcloud.question.commons.core.question.*;
+import cn.com.qmth.examcloud.web.redis.RedisClient;
 import org.apache.commons.collections.CollectionUtils;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -67,6 +69,9 @@ public class ExtractConfigProviderServiceImpl implements ExtractConfigProviderSe
     @Autowired
     private PaperService paperService;
 
+    @Autowired
+    private RedisClient redisClient;
+
     @Autowired
     private UpYunProperty upYunProperty;
 
@@ -96,7 +101,13 @@ public class ExtractConfigProviderServiceImpl implements ExtractConfigProviderSe
         }
 
         log.debug("将原始试卷:" + basePaper.getId() + "根据规则构建试卷结构");
-        DefaultPaper defaultPaper = this.buildDefaultByBasePaper(basePaper, String.valueOf(examId), courseCode, groupCode);
+
+        //优先从缓存中取
+        String cacheKey = Constants.CACHE_KEY_PAPER_FOR_EXTRACT_CONFIG + String.format("%s_%s_%s_%s", examId, courseCode, groupCode, basePaper.getId());
+        DefaultPaper defaultPaper = redisClient.get(cacheKey, DefaultPaper.class, Constants.DEFAULT_TIME_OUT);
+        if (defaultPaper == null) {
+            defaultPaper = this.buildDefaultByBasePaper(basePaper, String.valueOf(examId), courseCode, groupCode);
+        }
 
         Short questionOrder = extractConfig.getScrambling_the_question_order();
         Short optionOrder = extractConfig.getScrambling_the_option_order();
@@ -277,6 +288,13 @@ public class ExtractConfigProviderServiceImpl implements ExtractConfigProviderSe
         defaultPaper.setName(basePaper.getName());
         defaultPaper.setQuestionGroupList(questionGroupList);
         defaultPaper.setFullyObjective(fullyObjective);
+
+        if (examId != null) {
+            //存入缓存
+            String cacheKey = Constants.CACHE_KEY_PAPER_FOR_EXTRACT_CONFIG + String.format("%s_%s_%s_%s", examId, courseCode, groupCode, basePaper.getId());
+            redisClient.set(cacheKey, defaultPaper, Constants.DEFAULT_TIME_OUT);
+        }
+
         return defaultPaper;
     }
 

+ 6 - 2
examcloud-core-questions-starter/src/main/java/cn/com/qmth/examcloud/core/questions/starter/DemoController.java

@@ -1,5 +1,6 @@
 package cn.com.qmth.examcloud.core.questions.starter;
 
+import cn.com.qmth.examcloud.core.questions.service.ExtractConfigProviderService;
 import cn.com.qmth.examcloud.core.questions.service.cache.BasePaperCache;
 import cn.com.qmth.examcloud.core.questions.service.cache.Constants;
 import cn.com.qmth.examcloud.core.questions.service.cache.QuestionCache;
@@ -35,6 +36,8 @@ public class DemoController {
     private BasePaperCache basePaperCache;
     @Autowired
     private QuestionCache questionCache;
+    @Autowired
+    private ExtractConfigProviderService extractConfigProviderService;
 
     @Naked
     @ResponseBody
@@ -56,13 +59,14 @@ public class DemoController {
         //questionCache.remove(examId, courseCode, groupCode, questionId);
 
 
+        //extractConfigProviderService.getDefaultPaper(examId, courseCode, groupCode);
         String cacheKey = Constants.CACHE_KEY_PAPER_FOR_EXTRACT_CONFIG + String.format("%s_%s_%s_%s", examId, courseCode, groupCode, paperId);
         DefaultPaper defaultPaper = redisClient.get(cacheKey, DefaultPaper.class, Constants.DEFAULT_TIME_OUT);
         log.info("defaultPaperName: " + defaultPaper.getName());
 
 
-        final String patternKey = Constants.CACHE_KEY_PAPER + paperId;
-        //final String patternKey = Constants.CACHE_KEY_QUESTION + questionId;
+        final String patternKey = Constants.CACHE_KEY_PAPER + "*" + paperId;
+        //final String patternKey = Constants.CACHE_KEY_QUESTION + "*" + questionId;
         Set<String> keys = redisTemplate.keys(patternKey);
         log.info(StringUtils.join(keys, ","));