작성
·
311
답변 1
4
김태영님 안녕하세요.
재시도가 필요한 경우를 예로 들어드리자면 주문할때일것 같습니다.
유저 A 가 로지텍마우스를 구매하였고 동시에 유저 B 도 로지텍마우스를 구매하였습니다.
이럴때는 유저 A 가 먼저 Lock 을 잡고있다면 유저B 는 기다렸다가 재시도를 하여 로지텍마우스를 구매할 수 있게합니다.
재시도가 필요없을경우는 선착순 1명만 로지텍마우스를 구매할 수 있다고 가정합니다.
유저 A 가 로지텍마우스를 구매하고자 Lock 을 획득하였고, 유저 B 가 추후에 로지텍마우스를 구매하고자 Lock 획득을 시도합니다.
유저 A 가 구매를 하고있는중이며 구매는 1명만 할 수 있기때문에 유저 B 는 획득을 시도해봤자 로지텍마우스를 구매할 수 없습니다.
그렇기때문에 Lock 획득 재시도를 할 필요가 없습니다.
추가로 질문이 있으시다면 댓글 부탁드리겠습니다!
감사합니다.
tasklet1579 님 안녕하세요.
재시도가 필요하지 않은경우에는 lock 획득을 하지 못하면 바로 로직수행을 멈추시면 될것같습니다.
public void demo() {
Boolean lock = redisRepository.lock(key);
if(!lock) {
// 재시도가 필요하지 않으므로 다른로직을 수행하지 않습니다.
// 로깅이 필요하다면 로깅을 추가할 수 있습니다.
// 에러 상황이라면 throw 를 할 수도 있겠습니다.
return;
}
// 비즈니스 로직
}
재시도가 필요하지 않은 경우 Lettuce를 사용한다고 하셨는데
그렇다면 while 문 밖에서 다시 while 문으로 재고를 확인하고 재고가 없다면 break 처리된다고 이해하면 될까요?