setnx 명령어 터미널 테스트

NameLock과 유사한 방식으로 구현 됨
예제 소스
// lock
public Boolean lock(Long key) {
return redisTemplate
.opsForValue()
.setIfAbsent(generateKey(key), "lock", Duration.ofMillis(3000));
}
// unlock
public Boolean unlock(Long key) {
return redisTemplate.delete(generateKey(key));
}
// 실패 시 재요청
public void decrease(Long key, Long quantity) throws InterruptedException {
while(!redisLockRepository.lock(key)) {
// redis에 부하를 줄이기위해 100ms동안 Thread sleep
Thread.sleep(100);
}
try {
stockService.decrease(key, quantity);
} finally {
redisLockRepository.unlock(key);
}
}