redis 라이브러리별 케이스에 관하여 문의 드립니다
360
작성한 질문수 7
redis를 활용한 사례를 처음 접하여서 강의 중 말씀해주신
'재시도가 필요하지 않은 경우', '재시도가 필요한 경우'가 명확히 떠오르지 않습니다
괜찮으시다면 간단한 예를 들어서 설명해주시면 감사하겠습니다
답변 1
5
김태영님 안녕하세요.
재시도가 필요한 경우를 예로 들어드리자면 주문할때일것 같습니다.
유저 A 가 로지텍마우스를 구매하였고 동시에 유저 B 도 로지텍마우스를 구매하였습니다.
이럴때는 유저 A 가 먼저 Lock 을 잡고있다면 유저B 는 기다렸다가 재시도를 하여 로지텍마우스를 구매할 수 있게합니다.
재시도가 필요없을경우는 선착순 1명만 로지텍마우스를 구매할 수 있다고 가정합니다.
유저 A 가 로지텍마우스를 구매하고자 Lock 을 획득하였고, 유저 B 가 추후에 로지텍마우스를 구매하고자 Lock 획득을 시도합니다.
유저 A 가 구매를 하고있는중이며 구매는 1명만 할 수 있기때문에 유저 B 는 획득을 시도해봤자 로지텍마우스를 구매할 수 없습니다.
그렇기때문에 Lock 획득 재시도를 할 필요가 없습니다.
추가로 질문이 있으시다면 댓글 부탁드리겠습니다!
감사합니다.
0
재시도가 필요하지 않은 경우 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





