inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

재고시스템으로 알아보는 동시성이슈 해결방법

라이브러리 장단점

redis 라이브러리별 케이스에 관하여 문의 드립니다

360

김태영

작성한 질문수 7

1

redis를 활용한 사례를 처음 접하여서 강의 중 말씀해주신

'재시도가 필요하지 않은 경우', '재시도가 필요한 경우'가 명확히 떠오르지 않습니다

괜찮으시다면 간단한 예를 들어서 설명해주시면 감사하겠습니다

spring java 동시성

답변 1

5

최상용

김태영님 안녕하세요.

재시도가 필요한 경우를 예로 들어드리자면 주문할때일것 같습니다.

유저 A 가 로지텍마우스를 구매하였고 동시에 유저 B 도 로지텍마우스를 구매하였습니다.

이럴때는 유저 A 가 먼저 Lock 을 잡고있다면 유저B 는 기다렸다가 재시도를 하여 로지텍마우스를 구매할 수 있게합니다.

재시도가 필요없을경우는 선착순 1명만 로지텍마우스를 구매할 수 있다고 가정합니다.

유저 A 가 로지텍마우스를 구매하고자 Lock 을 획득하였고, 유저 B 가 추후에 로지텍마우스를 구매하고자 Lock 획득을 시도합니다.

유저 A 가 구매를 하고있는중이며 구매는 1명만 할 수 있기때문에 유저 B 는 획득을 시도해봤자 로지텍마우스를 구매할 수 없습니다.

그렇기때문에 Lock 획득 재시도를 할 필요가 없습니다.

추가로 질문이 있으시다면 댓글 부탁드리겠습니다!

감사합니다.

0

tasklet1579

재시도가 필요하지 않은 경우 Lettuce를 사용한다고 하셨는데

그렇다면 while 문 밖에서 다시 while 문으로 재고를 확인하고 재고가 없다면 break 처리된다고 이해하면 될까요?

class LettuceLockStockFacade {

public void decrease(Long key, Long quantity) throws InterruptedException {
    while (!redisRepository.lock(key)) {
        TimeUnit.MILLISECONDS.sleep(100); // 시간을 두고 부하를 줄여준다
    }
}

 

0

최상용

tasklet1579 님 안녕하세요.

재시도가 필요하지 않은경우에는 lock 획득을 하지 못하면 바로 로직수행을 멈추시면 될것같습니다.

public void demo() {
     Boolean lock = redisRepository.lock(key);
     if(!lock) {
          // 재시도가 필요하지 않으므로 다른로직을 수행하지 않습니다.
          // 로깅이 필요하다면 로깅을 추가할 수 있습니다.
          // 에러 상황이라면 throw 를 할 수도 있겠습니다.
          return;
     }

     // 비즈니스 로직
}

레디선 테스트코드에서 채널이름은 없어도 되는건가요?

0

67

2

낙관적 락을 사용할 떄 차이점

0

147

2

동시성 검증 코드에 관한 문의

0

110

2

단일연산

0

89

2

낙관적락vs. 레디스락

0

121

2

안녕하세요. 레디슨 질문있습니다..!!

0

78

2

@Lock(OPTIMISTIC)이 필요한 이유

0

106

2

get_lock 의 timeout이 3000초 이던데 너무 긴거 아닌가요?

0

143

2

DataSource Hikari 사용 이유

0

162

2

saveAndFlush 사용 이유 문의

0

125

3

비관적 락 VS 네임드 락

0

174

3

application.yaml 에 redis 정보

0

103

2

왜 클래스 이름에 Facade 가 붙나요?

0

194

2

@Transactional 으로 인한 동시성 문제 발생 원인이 궁금합니다.

0

226

2

@modifying 이용한 동시성 제어

0

179

2

DB락과 분산락

0

279

2

NamedLock 테스트 실패

0

192

2

테스트에서 트랜잭션 어노테이션 질문 있습니다.

0

184

2

optimistic Lock 재시도 질문입니다.

0

246

2

낙관적 락 테스트 실패

0

256

2

오류?

0

1644

4

LettureLockStockFacadeTest에서 오류가 발생합니다.

1

274

2

Pessimistic Lock 전체 테스트 오류 문의

0

384

3

비관적 락 vs 레디스(Lettuce)락 비교 관련 질문

0

473

2