Browse Source

feat:对课程展示,作业信息等进行缓存,减轻数据库压力

BaiQi 1 year ago
parent
commit
3bfef3e4d2

+ 4 - 0
src/main/java/com/njuzr/eaibackend/dto/course/CourseQueryDTO.java

@@ -16,4 +16,8 @@ public class CourseQueryDTO {
     private Long studentId;
     private String courseName;
     private String semester;
+
+    public boolean isEmpty() {
+        return courseId == null && teacherId == null && teacherPid == null && studentId == null && courseName == null && semester == null;
+    }
 }

+ 6 - 0
src/main/java/com/njuzr/eaibackend/service/impl/AssignmentServiceImpl.java

@@ -22,6 +22,8 @@ import com.njuzr.eaibackend.vo.EngagementVO;
 import com.njuzr.eaibackend.vo.UserVO;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.BeanUtils;
+import org.springframework.cache.annotation.CacheEvict;
+import org.springframework.cache.annotation.Cacheable;
 import org.springframework.http.HttpStatus;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
@@ -103,10 +105,12 @@ public class AssignmentServiceImpl implements AssignmentService {
 
 
     @Override
+    @Cacheable(value = "assignmentInfo", key = "'assignment_' + #assignmentId")
     public AssignmentVO findAssignmentById(Long assignmentId) {
         QueryWrapper<Assignment> wrapper = new QueryWrapper<>();
         wrapper.eq("assignment_id", assignmentId);
         Assignment res = assignmentMapper.selectOne(wrapper);
+        log.info("数据库查询作业:{}", assignmentId);
         if (res == null)
             throw MyException.create(HttpStatus.BAD_REQUEST, "作业不存在");
         return convertToVO(res);
@@ -149,6 +153,7 @@ public class AssignmentServiceImpl implements AssignmentService {
 
 
     @Override
+    @CacheEvict(value = "assignmentInfo", key = "'assignment_' + #assignmentId")
     public AssignmentVO updateAssignment(MyUserDetails user, Long assignmentId, AssignmentUpdateDTO assignmentUpdateDTO) {
         Assignment target = assignmentMapper.selectById(assignmentId);
         if (!Objects.equals(target.getTeacherId(), user.getId()))
@@ -175,6 +180,7 @@ public class AssignmentServiceImpl implements AssignmentService {
      */
     @Override
     @Transactional
+    @CacheEvict(value = "assignmentInfo", key = "'assignment_' + #assignmentId")
     public void deleteById(Long teacherId, Long assignmentId) {
         Assignment target = assignmentMapper.selectById(assignmentId);
         if (!Objects.equals(target.getTeacherId(), teacherId))

+ 11 - 2
src/main/java/com/njuzr/eaibackend/service/impl/CourseServiceImpl.java

@@ -21,6 +21,10 @@ import com.njuzr.eaibackend.vo.UserVO;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.cache.annotation.CacheEvict;
+import org.springframework.cache.annotation.CachePut;
+import org.springframework.cache.annotation.Cacheable;
+import org.springframework.cache.annotation.Caching;
 import org.springframework.http.HttpStatus;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
@@ -60,6 +64,7 @@ public class CourseServiceImpl implements CourseService {
 
 
     @Override
+    @CacheEvict(value = "coursesPages", allEntries = true)
     public CourseVO createCourse(CourseDTO courseDTO) {
         // 类型转换
         Course targetCourse = convertToPO(courseDTO);
@@ -77,12 +82,13 @@ public class CourseServiceImpl implements CourseService {
 
 
     @Override
+    @Cacheable(value = "coursePages", key = "#page.getPages() + '_' + #page.getSize() + '_' + #courseQueryDTO.isEmpty()", unless = "#page.getSize() <= 1 || !#courseQueryDTO.isEmpty()")
     public IPage<CourseVO> findCoursesPage(Page<Course> page, CourseQueryDTO courseQueryDTO) {
-        log.info(courseQueryDTO.toString());
+        log.info("课程信息从数据库查询: {}", courseQueryDTO.toString());
+        log.info(String.valueOf(page.getSize() <= 1 || !courseQueryDTO.isEmpty()));
         QueryWrapper<Course> wrapper = getCourseQueryWrapper(courseQueryDTO);
 
         IPage<Course> courses = courseMapper.selectPage(page, wrapper);
-        log.info(courses.getRecords().get(0).toString());
         return PageMapperUtil.convert(courses, this::convertToVO);
     }
 
@@ -148,6 +154,7 @@ public class CourseServiceImpl implements CourseService {
      * @param courseUpdateDTO
      */
     @Override
+    @CacheEvict(value = "coursePages", allEntries = true)
     public CourseVO updateCourse(Long userId, Long courseId, CourseUpdateDTO courseUpdateDTO) {
         User targetUser = userMapper.selectById(userId);
         Course targetCourse = courseMapper.selectById(courseId);
@@ -182,6 +189,7 @@ public class CourseServiceImpl implements CourseService {
      * @return
      */
     @Override
+    @CacheEvict(value = "coursePages", allEntries = true)
     public CourseVO updateCourseByPortal(Long userId, Long userPid, Long courseId, CourseUpdateDTO courseUpdateDTO) {
         User targetUser;
         if (userPid == null){
@@ -232,6 +240,7 @@ public class CourseServiceImpl implements CourseService {
      */
     @Override
     @Transactional
+    @CacheEvict(value = "coursePages", allEntries = true)
     public void deleteById(MyUserDetails user, Long courseId) {
         Course course = courseMapper.selectById(courseId);
         if (course == null) {

+ 2 - 1
src/main/java/com/njuzr/eaibackend/vo/AssignmentVO.java

@@ -3,6 +3,7 @@ package com.njuzr.eaibackend.vo;
 import com.njuzr.eaibackend.enums.AssignmentStatus;
 import lombok.Data;
 
+import java.io.Serializable;
 import java.util.Date;
 import java.util.List;
 
@@ -13,7 +14,7 @@ import java.util.List;
  */
 
 @Data
-public class AssignmentVO {
+public class AssignmentVO implements Serializable {
     private Long assignmentId;
 
     private String assignmentName;

+ 2 - 1
src/main/java/com/njuzr/eaibackend/vo/CourseVO.java

@@ -8,6 +8,7 @@ import lombok.Data;
 import lombok.EqualsAndHashCode;
 import lombok.ToString;
 
+import java.io.Serializable;
 import java.util.Date;
 import java.util.List;
 
@@ -18,7 +19,7 @@ import java.util.List;
  */
 
 @Data
-public class CourseVO { // 不需要把选课码放出来
+public class CourseVO implements Serializable { // 不需要把选课码放出来
     private Long courseId;
 
     private String courseName;