Redisson은 자바의 Redis 클라이언트 라이브러리다. 자바의 Redis 클라이언트 라이브러리는 여러 가지가 있는데, Lettuce와의 차이는 다음과 같다.
장단점이 있는 만큼 적절한 것을 택하면 좋을 것 같다.
*다만 주의점이 있는데, Redisson과 Lettuce로 동시에 락을 관리하면 안된다. Redisson은 내부적으로 특정 키를 통해 분산 락 메커니즘을 구현하고 있는데, Lettuce에서 만에 하나 동일 키에 대해 작업을 하면 문제가 생길 수 있다.
Redisson에서 제공하는 대표적인 락들에 대해 알아보겠다.
자바의 Lock 인터페이스를 구현한 Reentrant Lock 객체다.
만약 Lock을 관리하는 인스턴스가 죽으면 락 해제가 정상적으로 이루어지지 않는데, Redisson에서는 이를 Watchdog를 통해 관리한다. 락을 보유한 인스턴스가 락의 TTL을 계속 갱신하는 방법이다. 인스턴스가 죽으면 더 이상 갱신이 안되기 때문에 자연스럽게 락은 만료된다
leaseTime을 명시적으로 지정할 수 있는데, 이런 경우 Watchdog 기능은 비활성화된다.
RLock은 자바의 Lock과 동일하게 비선점 방식으로 작동한다.
*위 스펙은 다른 Redisson 락에서도 기본적으로 유효하다.
자바의 Lock 인터페이스를 구현한 Reentrant Lock 객체로서, 스레드가 락을 요청한 순서대로 락을 획득할 수 있게 하는 공정 락이다.
여러 개의 락을 묶어 단일 락처럼 기능할 수 있게 해주는 락이다.
자바의Semaphore 객체의 분산 버전이라고 생각하면 된다. 특이사항으로는 PermitExpirableSemaphore를 제공하는데 락 별로 TTL을 정할 수 있는 세마포어다.
자바의 Lock 인터페이스를 구현한 Spin Lock 객체다. 스핀락은 기본적인 Pub/Sub 방식과는 다르게 동작하는데, 모든 노드에 계속 브로드캐스팅하면서 재시도를 하게 되면 Redis 인스턴스의 CPU에 큰 부담이 되기 때문에 지수적 백오프 전략으로 스핀 락을 구현했다.
자바의 Lock 인터페이스를 구현한 Fenced Lock 객체다.
펜싱 토큰을 가지고 있는 락이라고 생각하면 된다.
왜 이런 락이 필요할까? 다음과 같은 상황이 있을 수 있다.

펜싱 토큰은 락을 획득할 때마다 증가하는 고유 번호로, 토큰 번호를 확인해 현재 유효한 락인지 아닌지 확인하는 방법이다.
락뿐만 아니라 서버가 유효한 요청을 보내는지 검증하는 상황에서 사용할 수 있는 방법이다.
현재보다 낮은 버전의 토큰? => 유효하지 않다는 뜻.
참고자료 및 출처