Prechádzať zdrojové kódy

改善调卷性能,加入缓存

宋悦 7 rokov pred
rodič
commit
856864bd48

+ 14 - 4
cqb-paper/src/main/java/com/qmth/cqb/paper/service/impl/ExtractConfigServiceImpl.java

@@ -25,6 +25,7 @@ import org.springframework.data.domain.PageRequest;
 import org.springframework.data.mongodb.core.MongoTemplate;
 import org.springframework.data.mongodb.core.query.Criteria;
 import org.springframework.data.mongodb.core.query.Query;
+import org.springframework.data.redis.core.RedisTemplate;
 import org.springframework.stereotype.Service;
 import org.springframework.util.Assert;
 
@@ -141,6 +142,9 @@ public class ExtractConfigServiceImpl implements ExtractConfigService {
 	@Autowired
 	private SubQuestionDtoAssembler subQuestionDtoAssembler;
 
+	@Autowired
+	private RedisTemplate redisTemplate;
+
     
 	@Override
 	public ExtractConfig findConfig(ExtractConfig condition) {
@@ -227,9 +231,7 @@ public class ExtractConfigServiceImpl implements ExtractConfigService {
 			logger.info("总共耗时:"+(System.currentTimeMillis() - beginTime)+"ms");
 		}else{
 			//乱序重新生成试卷
-			Paper newPaper = this.recombinationPaper(basePaper,PaperType.STUDENT_EXAM,
-					upSetQuestionOrder,
-					upSetOptionOrder);
+			Paper newPaper = this.recombinationPaper(basePaper, PaperType.STUDENT_EXAM, upSetQuestionOrder, upSetOptionOrder);
 			logger.info("根据新试卷 paperId:"+newPaper.getId()+"组装PaperDto后返回");
 
 			long genPaperFinishTime = System.currentTimeMillis();
@@ -510,8 +512,14 @@ public class ExtractConfigServiceImpl implements ExtractConfigService {
 	 * @return
 	 */
 	private PaperDto getPaperDtoByPaper(Paper paper){
-		PaperDto paperDto = paperDtoAssembler.toDto(paper);
 
+		//优先从redis中获取缓存dto
+		Object cacheDto = redisTemplate.opsForValue().get(paper.getId());
+		if(cacheDto != null && cacheDto.getClass().equals(PaperDto.class)){
+			return (PaperDto)cacheDto;
+		}
+		//没有则重新组装
+		PaperDto paperDto = paperDtoAssembler.toDto(paper);
 		//将小题全部取出来,只取一次
 		List<PaperDetailUnit> allPaperDetailUnits = paperDetailUnitRepo.findByPaperOrderByNumber(paper);
 		//获取大题
@@ -567,6 +575,8 @@ public class ExtractConfigServiceImpl implements ExtractConfigService {
             paperDetailDtos.get(i).setPaperDetailUnits(paperDetailUnitDtos);
             paperDetailDtos.get(i).setCnNum(CommonUtils.toCHNum(paperDetailDtos.get(i).getNumber()));
         }
+        //将重新组装的dto放进缓存
+        redisTemplate.opsForValue().set(paperDto.getId(),paperDto);
 		return paperDto;
 	}