From 3f7cdb4c5096214765f935e9e8616730bcac1344 Mon Sep 17 00:00:00 2001 From: fuliqi <fuliqi@qq.com> Date: 星期四, 04 七月 2024 11:04:44 +0800 Subject: [PATCH] 学习记录,引入caffeine --- src/main/java/com/ycl/jxkg/job/StudyRecordJob.java | 67 +++++++++++++++++++++++++++++++++ 1 files changed, 67 insertions(+), 0 deletions(-) diff --git a/src/main/java/com/ycl/jxkg/job/StudyRecordJob.java b/src/main/java/com/ycl/jxkg/job/StudyRecordJob.java new file mode 100644 index 0000000..0167d8d --- /dev/null +++ b/src/main/java/com/ycl/jxkg/job/StudyRecordJob.java @@ -0,0 +1,67 @@ +package com.ycl.jxkg.job; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.github.benmanes.caffeine.cache.Cache; +import com.ycl.jxkg.domain.entity.StudyRecord; +import com.ycl.jxkg.mapper.StudyRecordMapper; +import com.ycl.jxkg.service.StudyRecordService; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.scheduling.annotation.Scheduled; +import org.springframework.stereotype.Component; +import org.springframework.util.CollectionUtils; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.concurrent.ConcurrentMap; +import java.util.stream.Collectors; + +/** + * @author锛歺p + * @date锛�2024/7/1 11:06 + */ +@Component +@RequiredArgsConstructor +@Slf4j +public class StudyRecordJob { + + @Autowired + private Cache<String, Object> caffeineCache; + private final StudyRecordMapper studyRecordMapper; + private final StudyRecordService studyRecordService; + + @Scheduled(fixedRate = 1200000) // 20鍒嗛挓鎵ц涓�娆� + private void updateStudyRecord() { + log.info("寮�濮嬪瓨瀛︿範鏃堕暱"); + List<StudyRecord> cacheList = new ArrayList<>(); + // 鍙栧嚭鎵�鏈夌紦瀛橀」 + ConcurrentMap<String, Object> map = caffeineCache.asMap(); + for (Map.Entry<String, Object> entry : map.entrySet()) { + String key = entry.getKey(); + if (key.startsWith("STUDENT_")) { + StudyRecord studyRecord = (StudyRecord) entry.getValue(); + cacheList.add(studyRecord); + } + } + List<Integer> studentIds = cacheList.stream().map(StudyRecord::getStudentId).collect(Collectors.toList()); + if (!CollectionUtils.isEmpty(studentIds)) { + //鏁版嵁搴撲腑宸茬粡瀛樺湪鐨勫鐢熸暟鎹� + QueryWrapper<StudyRecord> wrapper = new QueryWrapper<>(); + wrapper.in("student_id", studentIds); + List<StudyRecord> studyRecords = studyRecordMapper.selectList(wrapper); + for (StudyRecord record : studyRecords) { + for (StudyRecord cacheRecord : cacheList) { + if (record.getStudentId().equals(cacheRecord.getStudentId())) { + cacheRecord.setId(record.getId()); + cacheRecord.setStudyTime(record.getStudyTime() + cacheRecord.getStudyTime()); + } + } + } + studyRecordService.saveOrUpdateBatch(cacheList); + } + caffeineCache.invalidateAll(map.keySet()); + log.info("缁撴潫瀛樺涔犳椂闀�"); + } +} -- Gitblit v1.8.0