Skip to content

Commit 8289518

Browse files
authored
fix : 랭킹 카테고리 조회 메타데이터 사용 , 랭킹 캐싱 ttl 11분으로 교체 (#159)
1 parent e264891 commit 8289518

File tree

2 files changed

+18
-15
lines changed

2 files changed

+18
-15
lines changed

src/main/java/com/threestar/trainus/domain/ranking/repository/RankingRepository.java

Lines changed: 17 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -31,22 +31,25 @@ ORDER BY (
3131
List<RankingData> findTopRankings();
3232

3333
@Query("""
34-
SELECT r.reviewee.id as userId,
35-
r.reviewee.nickname as userNickname,
36-
CAST(COUNT(r.reviewId) AS INTEGER) as reviewCount,
37-
CAST(AVG(r.rating) AS DOUBLE) as rating,
38-
p.profileImage as profileImage
39-
FROM Review r
40-
JOIN r.lesson l
41-
JOIN r.reviewee u
34+
SELECT pm.user.id as userId,
35+
pm.user.nickname as userNickname,
36+
pm.reviewCount as reviewCount,
37+
pm.rating as rating,
38+
p.profileImage as profileImage
39+
FROM ProfileMetadata pm
40+
JOIN pm.user u
4241
LEFT JOIN Profile p ON p.user = u
43-
WHERE l.category = :category
44-
AND r.deletedAt IS NULL
45-
GROUP BY r.reviewee.id, r.reviewee.nickname, p.profileImage
46-
HAVING COUNT(r.reviewId) >= 5
42+
WHERE pm.reviewCount >= 5
43+
AND EXISTS (
44+
SELECT 1 FROM Review r
45+
JOIN r.lesson l
46+
WHERE r.reviewee = u
47+
AND l.category = :category
48+
AND r.deletedAt IS NULL
49+
)
4750
ORDER BY (
48-
(AVG(r.rating) / 5.0) * 0.5 +
49-
(LEAST(COUNT(r.reviewId), 100) / 100.0) * 0.5
51+
(pm.rating / 5.0) * 0.5 +
52+
(LEAST(pm.reviewCount, 100) / 100.0) * 0.5
5053
) DESC
5154
LIMIT 10
5255
""")

src/main/java/com/threestar/trainus/domain/ranking/service/RankingService.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -90,7 +90,7 @@ private List<RankingResponseDto> calculateRankings(Category category) {
9090
private void saveToRedis(List<RankingResponseDto> rankings, String cacheKey) {
9191
try {
9292
String json = objectMapper.writeValueAsString(rankings);
93-
redisTemplate.opsForValue().set(cacheKey, json, Duration.ofHours(24));
93+
redisTemplate.opsForValue().set(cacheKey, json, Duration.ofMinutes(11));
9494
} catch (Exception e) {
9595
log.warn("Redis 저장 실패: {}", e.getMessage());
9696
}

0 commit comments

Comments
 (0)