用户收藏sql优化,接口增加缓存

This commit is contained in:
张松 2025-01-02 10:44:39 +08:00
parent fb00873494
commit 51e3639065
2 changed files with 14 additions and 31 deletions

View File

@ -14,6 +14,8 @@ import com.sqx.modules.course.entity.CourseDetails;
import com.sqx.modules.course.service.CourseCollectService;
import com.sqx.modules.course.service.CourseDetailsService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cache.annotation.CacheEvict;
import org.springframework.cache.annotation.CachePut;
import org.springframework.stereotype.Service;
import java.text.SimpleDateFormat;
@ -32,6 +34,7 @@ public class CourseCollectServiceImpl extends ServiceImpl<CourseCollectDao, Cour
private ReentrantReadWriteLock reentrantReadWriteLock=new ReentrantReadWriteLock(true);
@Override
@CacheEvict(value = "app:courseCollect", key = "#courseCollect.userId")
public Result insertCourseCollect(CourseCollect courseCollect) {
reentrantReadWriteLock.writeLock().lock();
try {
@ -95,6 +98,7 @@ public class CourseCollectServiceImpl extends ServiceImpl<CourseCollectDao, Cour
}
@Override
@CachePut(value = "app:courseCollect", key = "#userId")
public Result selectByUserId(Integer page, Integer limit, Long userId,Integer classify) {
Page<Course> pages=new Page<>(page,limit);
IPage<Course> courseIPage = baseMapper.selectCourseByCollect(pages, userId,classify);

View File

@ -10,44 +10,23 @@
c.*,
d.course_details_name AS courseDetailsName,
d.course_details_id AS courseDetailsId,
cd.course_details_count AS courseDetailsCount
COUNT(d.course_details_id) AS courseDetailsCount
FROM
course_collect u
LEFT JOIN course c ON u.course_id = c.course_id
LEFT JOIN (
SELECT
cc.course_id,
cc.user_id,
d.course_details_name,
d.course_details_id
FROM
course_collect cc
LEFT JOIN course_details d ON cc.course_details_id = d.course_details_id
WHERE
cc.classify = 3
AND cc.user_id = #{userId}
ORDER BY
cc.update_time DESC
) AS d ON u.course_id = d.course_id
LEFT JOIN (
SELECT
d.course_id,
COUNT(*) AS course_details_count
FROM
course_details d
GROUP BY
d.course_id
) AS cd ON c.course_id = cd.course_id
LEFT JOIN
course c ON u.course_id = c.course_id
LEFT JOIN
course_details d ON u.course_details_id = d.course_details_id
LEFT JOIN
course_collect cc ON u.course_id = cc.course_id AND cc.user_id = #{userId} AND cc.classify = 3
WHERE
u.user_id = #{userId}
AND c.course_id IS NOT NULL
AND u.classify = #{classify}
AND c.course_id IS NOT NULL
GROUP BY
u.course_id
u.course_id, c.course_id, d.course_details_name, d.course_details_id
ORDER BY
produceEndTime DESC
produceEndTime DESC;
<!-- SELECT
MAX( u.update_time ) AS produceEndTime,