레디스의 자바 클라이언트이다.
Lettuce로 분산 락(Distributed lock)을 구현하는 경우 setnx 명령어를 활용할 수 있다.
*setnx: 동일한 key가 존재하지 않을때만 value가 저장됨 set if not exists
이때 Spin lock 방식으로 구현하는데, 주의할 점으로 retry 로직을 개발자가 직접 작성해주어야한다.
스레드가 Lock을 획득하기 위해 반복적으로 시도하는 기법이다.
Spin Lock으로 락을 획득하는 과정을 그림으로 나타내면 다음과 같다.

먼저 Thread-1이 setnx 명령어로 key = 1, value = lock으로 레디스에 set을 시도한다.
현재 레디스에는 key가 1인 값이 없으므로 정상적으로 적재하고 성공을 반환한다.
이후 Thread-2가 동일한 key와 value로 set을 시도한다.
하지만 이때는 이미 {1: lock}으로 값이 포함되어 있으므로 Thread-2의 set은 실패한다.
Thread-2는 Lock 획득에 실패하였으므로 일정시간(e.g. 100ms) 이후 Lock 획득을 재시도 한다.
Lettuce와 같은 자바 레디스 클라이언트이다.
Redisson을 사용하는 경우 pub-sub 기반으로 Lock을 구현한다.
Lock을 관리하기 위한 채널을 생성한다.
Lock을 점유중인 쓰레드가 작업이 끝나면 Lock을 획득하려고 대기중인 쓰레드에게 해제를 알려준다.
이후 안내를 받은 쓰레드가 Lock을 획득하는 시도를 한다.