인프런 커뮤니티 질문&답변
lettuce에서 lock할 때 동시성 문제
작성
·
571
답변 1
1
최상용
지식공유자
배효셩님 안녕하세요.
redissonClient.getLock 과 lock.tryLock 코드를 말씀하시는게 맞으실까요 ?
이 코드를 말씀하시는게 맞으시다면 동시성 문제가 발생하지 않습니다.
이미 다른 스레드에서 점유중이라면 락 획득을 대기하다가 다른 스레드에서 락을 해제할때 락 획득을 시도하기 때문입니다.
감사합니다.
작성
·
571
답변 1
1
배효셩님 안녕하세요.
redissonClient.getLock 과 lock.tryLock 코드를 말씀하시는게 맞으실까요 ?
이 코드를 말씀하시는게 맞으시다면 동시성 문제가 발생하지 않습니다.
이미 다른 스레드에서 점유중이라면 락 획득을 대기하다가 다른 스레드에서 락을 해제할때 락 획득을 시도하기 때문입니다.
감사합니다.
LettuceLockStockFacade 클래스에
while (!redisLockRepository.lock(key)) {
Thread.sleep(100);
}
요부분이요
RedisLockRepository에서
public Boolean lock(Long key) {
return redisTemplate
.opsForValue()
.setIfAbsent(generateKey(key), "lock", Duration.ofMillis(3_000));
}
여기서 key 값을 가져오는 것 같은데 key 값을 조회할 때 동시에 여러군데에서 조회하면 동시성 문제가 발생하지 않나요?