Skip to content

Commit 6e4942f

Browse files
authored
Feat: ttl 적용하여 캐싱 기능 개선 (#20)
* 조회수 증가 방식 수정 * 랭킹 조회 메서드 추가 * ConcertServiceImpl에 랭킹 조회 기능 추가 * ConcertController에 API 추가
1 parent 2059cff commit 6e4942f

File tree

4 files changed

+31
-13
lines changed

4 files changed

+31
-13
lines changed

src/main/java/org/example/siljeun/domain/concert/controller/ConcertController.java

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -64,8 +64,13 @@ public ResponseEntity<ConcertDetailResponse> getConcertDetail(@PathVariable Long
6464
return ResponseEntity.ok(response);
6565
}
6666

67-
@GetMapping("/popular")
68-
public ResponseEntity<List<ConcertSimpleResponse>> getPopularConcerts() {
69-
return ResponseEntity.ok(concertService.getPopularConcerts());
67+
@GetMapping("/popular/daily")
68+
public ResponseEntity<List<ConcertSimpleResponse>> getDailyPopularConcerts() {
69+
return ResponseEntity.ok(concertService.getDailyPopularConcerts());
70+
}
71+
72+
@GetMapping("/popular/weekly")
73+
public ResponseEntity<List<ConcertSimpleResponse>> getWeeklyPopularConcerts() {
74+
return ResponseEntity.ok(concertService.getWeeklyPopularConcerts());
7075
}
7176
}

src/main/java/org/example/siljeun/domain/concert/service/ConcertCacheService.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,4 +29,10 @@ public List<Long> getTopConcertIds(int limit) {
2929
.toList();
3030
}
3131

32+
public List<Long> getTopConcertIds(String key, int limit) {
33+
Set<Object> ids = redisTemplate.opsForZSet()
34+
.reverseRange(key, 0, limit - 1);
35+
return ids.stream().map(id -> Long.valueOf(id.toString())).toList();
36+
}
37+
3238
}

src/main/java/org/example/siljeun/domain/concert/service/ConcertService.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,5 +18,7 @@ public interface ConcertService {
1818

1919
ConcertDetailResponse getConcertDetail(Long concertId);
2020

21-
List<ConcertSimpleResponse> getPopularConcerts();
21+
List<ConcertSimpleResponse> getDailyPopularConcerts();
22+
23+
List<ConcertSimpleResponse> getWeeklyPopularConcerts();
2224
}

src/main/java/org/example/siljeun/domain/concert/service/ConcertServiceImpl.java

Lines changed: 14 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -120,21 +120,26 @@ public ConcertDetailResponse getConcertDetail(Long concertId) {
120120
}
121121

122122
@Override
123-
public List<ConcertSimpleResponse> getPopularConcerts() {
124-
List<Long> topIds = concertCacheService.getTopConcertIds(7);
125-
List<Concert> concerts = concertRepository.findByIdIn(topIds);
123+
public List<ConcertSimpleResponse> getDailyPopularConcerts() {
124+
List<Long> ids = concertCacheService.getTopConcertIds("ranking:daily", 7);
125+
return mapConcertsByIdOrder(ids);
126+
}
126127

128+
@Override
129+
public List<ConcertSimpleResponse> getWeeklyPopularConcerts() {
130+
List<Long> ids = concertCacheService.getTopConcertIds("ranking:weekly", 7);
131+
return mapConcertsByIdOrder(ids);
132+
}
133+
134+
private List<ConcertSimpleResponse> mapConcertsByIdOrder(List<Long> ids) {
135+
List<Concert> concerts = concertRepository.findByIdIn(ids);
127136
Map<Long, Concert> concertMap = concerts.stream()
128137
.collect(Collectors.toMap(Concert::getId, c -> c));
129-
130-
return topIds.stream()
138+
return ids.stream()
131139
.map(concertMap::get)
132140
.filter(Objects::nonNull)
133141
.map(c -> new ConcertSimpleResponse(
134-
c.getId(),
135-
c.getTitle(),
136-
c.getVenue().getName(),
137-
c.getCategory().name()
142+
c.getId(), c.getTitle(), c.getVenue().getName(), c.getCategory().name()
138143
))
139144
.toList();
140145
}

0 commit comments

Comments
 (0)