From ee248b483dab04b6ad312c255392cab67e08c8f8 Mon Sep 17 00:00:00 2001 From: none Date: Mon, 20 Mar 2023 18:02:13 +0800 Subject: [PATCH] =?UTF-8?q?=E7=BA=BF=E4=B8=8A=E8=AF=BE=E7=BC=93=E5=AD=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../xyz/playedu/api/caches/CourseCache.java | 42 +++++++++++++++++++ .../controller/frontend/HourController.java | 16 ++++--- 2 files changed, 52 insertions(+), 6 deletions(-) create mode 100644 src/main/java/xyz/playedu/api/caches/CourseCache.java diff --git a/src/main/java/xyz/playedu/api/caches/CourseCache.java b/src/main/java/xyz/playedu/api/caches/CourseCache.java new file mode 100644 index 0000000..e5bdb04 --- /dev/null +++ b/src/main/java/xyz/playedu/api/caches/CourseCache.java @@ -0,0 +1,42 @@ +package xyz.playedu.api.caches; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; +import xyz.playedu.api.domain.Course; +import xyz.playedu.api.exception.NotFoundException; +import xyz.playedu.api.service.CourseService; +import xyz.playedu.api.util.RedisUtil; + +/** + * @Author 杭州白书科技有限公司 + * @create 2023/3/20 17:57 + */ +@Component +public class CourseCache { + + @Autowired + private CourseService courseService; + + private final static String keyTemplate = "course:%d"; + + private final static int expire = 3600;//s + + public Course findOrFail(Integer id) throws NotFoundException { + String keyName = key(id); + if (RedisUtil.exists(keyName)) { + return (Course) RedisUtil.get(keyName); + } + Course course = courseService.findOrFail(id); + put(course); + return course; + } + + public void put(Course course) { + RedisUtil.set(key(course.getId()), course, expire); + } + + private String key(Integer courseId) { + return String.format(keyTemplate, courseId); + } + +} diff --git a/src/main/java/xyz/playedu/api/controller/frontend/HourController.java b/src/main/java/xyz/playedu/api/controller/frontend/HourController.java index e83335d..8137dc0 100644 --- a/src/main/java/xyz/playedu/api/controller/frontend/HourController.java +++ b/src/main/java/xyz/playedu/api/controller/frontend/HourController.java @@ -4,6 +4,7 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; import xyz.playedu.api.PlayEduFCtx; +import xyz.playedu.api.caches.CourseCache; import xyz.playedu.api.caches.UserCanSeeCourseCache; import xyz.playedu.api.domain.*; import xyz.playedu.api.exception.NotFoundException; @@ -31,18 +32,21 @@ public class HourController { @Autowired private CourseHourService hourService; - @Autowired - private UserCanSeeCourseCache userCanSeeCourseCache; - @Autowired private ResourceService resourceService; @Autowired private UserCourseHourRecordService userCourseHourRecordService; + @Autowired + private UserCanSeeCourseCache userCanSeeCourseCache; + + @Autowired + private CourseCache courseCache; + @GetMapping("/{id}/play") public JsonResponse play(@PathVariable(name = "courseId") Integer courseId, @PathVariable(name = "id") Integer id) throws NotFoundException, ServiceException { - Course course = courseService.findOrFail(courseId); + Course course = courseCache.findOrFail(courseId); userCanSeeCourseCache.check(PlayEduFCtx.getUser(), course, true); CourseHour hour = hourService.findOrFail(id, courseId); Resource resource = resourceService.findOrFail(hour.getRid()); @@ -63,7 +67,7 @@ public class HourController { } User user = PlayEduFCtx.getUser(); // 线上课检测 - Course course = courseService.findOrFail(courseId); + Course course = courseCache.findOrFail(courseId); // 权限校验 userCanSeeCourseCache.check(user, course, true); // 课时检测 @@ -76,7 +80,7 @@ public class HourController { @PostMapping("/{id}/ping") public JsonResponse ping(@PathVariable(name = "courseId") Integer courseId, @PathVariable(name = "id") Integer id) throws NotFoundException, ServiceException { - Course course = courseService.findOrFail(courseId); + Course course = courseCache.findOrFail(courseId); userCanSeeCourseCache.check(PlayEduFCtx.getUser(), course, true); return JsonResponse.success(); }