쿠폰 개수를 증가시키는 코드에서 궁금한 점이 있습니다.
233
작성한 질문수 5
public Long increment() {
return redisTemplate
.opsForValue()
.increment("coupon_count");
}
----------------------------------------------------
public void apply(Long userId) {
Long count = couponCountRepository.increment();
if (count > 100) {
return;
}
couponRepository.save(new Coupon(userId));
}코드에서 쿠폰을 100개 발급할 수 있도록 했는데
만약 동시에 100만 개의 요청이 들어오게 되면 redis에도 똑같이 100만 번의 요청이 가서 100개의 요청을 제외한 나머지 불필요한 요청을 redis가 처리해야 되는 문제가 발생할 것 같습니다.
public void apply(Long userId) {
Long count = couponCountRepository.getCount();
if (count > 100) {
return;
}
couponCountRepository.increment();
couponRepository.save(new Coupon(userId));
}그래서 쿠폰 개수를 먼저 가져와서 검증 후 개수를 올리게 되면 또다시 Race Condition이 발생할 것 같습니다.
실무에서는 어떠한 방식으로 코드를 작성하시는지 궁금합니다!
답변 1
0
강민님 안녕하세요.
말씀해주신 방법대로 하게된다면 race condition 이 발생할 수 있습니다.
1차로 먼저 가져온 후 100개 이상이라면 return 하고 100개 이하라면 increment 한 후 결과값을 재검증하는 방식으로 사용한다면 불필요한 요청을 최소화 할 수 있을 것 같습니다.
감사합니다.
재고 감소와 쿠폰 발급은 왜 서로 다른 방식으로 동시성을 제어하나요?
0
57
2
ApplyService와 Consumer서비스의 db공유?
0
98
2
consumer가 topic을 전부 사용하기 전에 사용자에게는 쿠폰이 발급된것으로 확인하는 과정에서 발생가능한 문제.
0
104
1
쿠폰에 관련되어서 좀 더 참고할만한 자료가 있을까요?
0
128
2
흐름정리 제가 이해한게 맞나요?
0
106
2
안되서 스트레스 받아요
-3
142
2
프로젝트 진행할때 모듈로 추가하는 이유가 궁금합니다!
0
217
2
Redis 활용하기 문제점 해결하기 부분이 이해가 잘 안됩니다...
0
238
1
카프카를 도입하고 난 뒤 로그로 보여지는 장점을 발견하지 못하고 있습니다.
0
204
2
키생성 방식에 따른 성능
0
202
2
사용자 동선에 대한 트랜잭션 문의
0
162
2
강사님 강의를 듣고 실제 프로젝트에서 이벤트 응모 시스템을 만들어 봤습니다.
0
235
1
쿠폰 발급 개수 제한
0
213
2
ApplyService 의 총 처리 시간이 궁금합니다.
0
174
1
쿠폰 생성 에러 처리에 관해서 질문이 있습니다.
0
259
2
마지막에 하신 테스트 자체는 실패하는 게 맞는거죠??
0
310
2
안녕하세요 질문 있습니다!
0
328
1
쿠폰 발급 유저 흐름에 대한 질문
0
331
2
수량 조절에 대한 질문이 있습니다.
0
273
2
kafka Producer 실행 중 에러 시 redis count 정합성 이슈
0
431
2
test 과정에서 오류가 발생합니다.
0
430
1
도커 환경설정에 대해서
0
299
2
Redis의 INCR 사용 해도 Race condition이 잡히지 않는 문제
0
641
1
consumer 모듈
0
359
2





