33import com .back .web7_9_codecrete_be .domain .concerts .dto .concert .ConcertDetailResponse ;
44import com .back .web7_9_codecrete_be .domain .concerts .dto .concert .ConcertItem ;
55import com .back .web7_9_codecrete_be .domain .concerts .dto .concert .ListSort ;
6+ import com .back .web7_9_codecrete_be .domain .users .entity .User ;
67import lombok .RequiredArgsConstructor ;
78import lombok .extern .slf4j .Slf4j ;
89import org .springframework .data .domain .Pageable ;
910import org .springframework .data .redis .core .*;
10- import org .springframework .security .core .parameters .P ;
1111import org .springframework .stereotype .Repository ;
1212
1313import java .util .*;
@@ -28,6 +28,8 @@ public class ConcertRedisRepository {
2828
2929 private static final String VIEW_COUNT_MAP = "viewCountMap" ;
3030
31+ private static final String CONCERTS_COUNT_PREFIX = "totalConcertsCount: " ;
32+
3133 private static final int HOUR = 3600 ;
3234
3335 // 최초 공연 로드 락
@@ -160,5 +162,47 @@ private void deleteAllItemsByPREFIX(String prefix) {
160162 }
161163 }
162164
165+ // 총 공연의 개수 저장
166+ public Long saveTotalConcertsCount (Long totalConcertsCount , ListSort sort ) {
167+ redisTemplate .opsForValue ().set (CONCERTS_COUNT_PREFIX + sort .name (),totalConcertsCount .toString ());
168+ return totalConcertsCount ;
169+ }
170+
171+ // 총 공연의 개수 조회
172+ public Long getTotalConcertsCount (ListSort sort ) {
173+ String raw = redisTemplate .opsForValue ().get (CONCERTS_COUNT_PREFIX + sort .name ());
174+ if (raw == null ) return -1L ;
175+ else return Long .parseLong (redisTemplate .opsForValue ().get (CONCERTS_COUNT_PREFIX + sort .name ()));
176+ }
177+
178+ // 총 공연의 개수 삭제
179+ public void deleteTotalConcertsCount (ListSort sort ) {
180+ redisTemplate .delete (CONCERTS_COUNT_PREFIX +sort .name ());
181+ }
182+
183+ // 사용자가 좋아요를 누른 공연의 개수 조회(임시 캐시 느낌으로 짧게 저장, 조회시 시간 갱신 ~1일
184+ public Long getUserLikedCount (User user ) {
185+ String raw = redisTemplate .opsForValue ().get (CONCERTS_COUNT_PREFIX + user .getId ());
186+ if (raw == null ) return -1L ;
187+ redisTemplate .expire (CONCERTS_COUNT_PREFIX + user .getId (), 1 , TimeUnit .DAYS );
188+ return Long .parseLong (redisTemplate .opsForValue ().get (CONCERTS_COUNT_PREFIX + user .getId ()));
189+ }
190+
191+ // 사용자가 좋아요를 누른 공연의 개수 저장
192+ public Long saveUserLikedCount (User user ,Long count ) {
193+ redisTemplate .opsForValue ().set (
194+ CONCERTS_COUNT_PREFIX + user .getId (),
195+ count .toString (),
196+ 1 ,
197+ TimeUnit .DAYS
198+ );
199+ return count ;
200+ }
201+
202+ // 좋아요 누른 공연의 개수 캐시 삭제
203+ public void deleteUserLikedCount (User user ) {
204+ redisTemplate .delete (CONCERTS_COUNT_PREFIX + user .getId ());
205+ }
206+
163207
164208}
0 commit comments