Redis 및 캐싱을 적용한 성능 개선
Last updated
Last updated
@Cacheable(value = "concertScheduleCache", key = "#concertId + '-' + #isSoldOut")
public List<ConcertSchedule> findByConcertIdAndIsSoldOut(Long concertId, boolean isSoldOut) {
return concertScheduleRepository.findByConcertIdAndIsSoldOut(concertId, isSoldOut);
}public long countAvailableSeats(Long concertId, LocalDate scheduleDate) {
String key = "availableSeats:" + concertId + ":" + scheduleDate;
// 캐시 조회
Long cachedCount = redisTemplate.opsForValue().get(key);
if (cachedCount != null) {
return cachedCount;
}
// 캐시에 데이터가 없으면 DB에서 조회 후 저장
long count = seatRepository.countAvailableSeats(concertId, scheduleDate);
redisTemplate.opsForValue().set(key, count, 1, TimeUnit.HOURS);
return count;
}public void updateSeatStatus(Long seatId, String status) {
seatRepository.updateSeatStatus(seatId, status);
redisTemplate.opsForValue().set("seat:" + seatId, status);
}redisTemplate.opsForValue().set(key, value, 1, TimeUnit.HOURS);jpublic void updateSeat(Long seatId, String status) {
seatRepository.updateStatus(seatId, status);
redisTemplate.delete("seat:" + seatId); // 캐시 삭제
}