From ffb339bc902ece97a3e37c2fd205c763d1f386eb Mon Sep 17 00:00:00 2001 From: Layla Oh Date: Sat, 1 Nov 2025 23:38:24 +0900 Subject: [PATCH] =?UTF-8?q?fix:=20redis=20=EB=A9=B1=EB=93=B1=EC=84=B1=20?= =?UTF-8?q?=EC=82=AD=EC=A0=9C=EB=A1=9C=20=EB=8D=B0=EC=9D=B4=ED=84=B0?= =?UTF-8?q?=EA=B0=80=20=EC=A4=91=EB=B3=B5=20=EC=B6=95=EC=A0=81=20=EB=90=98?= =?UTF-8?q?=EB=8A=94=EA=B2=83=EC=9D=84=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/RawDataController.java | 24 +++++++++++++++++-- 1 file changed, 22 insertions(+), 2 deletions(-) diff --git a/UsageService/src/main/java/screentimeai/presentation/controller/RawDataController.java b/UsageService/src/main/java/screentimeai/presentation/controller/RawDataController.java index 388ff30..470f8c7 100644 --- a/UsageService/src/main/java/screentimeai/presentation/controller/RawDataController.java +++ b/UsageService/src/main/java/screentimeai/presentation/controller/RawDataController.java @@ -22,6 +22,7 @@ import java.time.*; import java.util.ArrayList; import java.util.List; +import java.util.Set; import java.util.UUID; import java.util.stream.Collectors; @@ -76,8 +77,27 @@ public ResponseEntity createRawDataTestUser( newDataList.addAll(recentData); - // 테스트 계정은 시뮬레이션 목적이므로 멱등성 체크 없이 바로 처리 - log.info("🔄 Test account: Skipping deduplication, processing all {} records", newDataList.size()); + // 테스트 계정은 시뮬레이션 목적이므로 기존 오늘 데이터를 삭제하고 새로 시작 + log.info("🔄 Test account: Clearing today's Redis data before simulation"); + + // 오늘 날짜의 Redis 키 삭제 (daily_metrics와 realtime_metrics) + java.time.LocalDate today = java.time.LocalDate.now(zoneId); + String dailyKey = "daily_metrics:" + subjectId + ":" + today; + String realtimeEventsKey = "realtime_metrics:" + subjectId + ":events"; + String realtimeStatsKey = "realtime_metrics:" + subjectId + ":stats"; + + redisTemplate.delete(dailyKey); + redisTemplate.delete(realtimeEventsKey); + redisTemplate.delete(realtimeStatsKey); + log.info("🗑️ Deleted existing Redis keys for today: {}", dailyKey); + + // 멱등성 키도 삭제 (processed:subjectId:timestamp) + String processedKeyPattern = "processed:" + subjectId + ":*"; + Set processedKeys = redisTemplate.keys(processedKeyPattern); + if (processedKeys != null && !processedKeys.isEmpty()) { + redisTemplate.delete(processedKeys); + log.info("🗑️ Deleted {} processed keys for clean simulation", processedKeys.size()); + } log.info("🚀 Aggregating {} records into Redis via metricsAggregator...", newDataList.size()); metricsAggregator.aggregateRawDataBatch(newDataList);