Engineering Note

[Redis] Redisssion 락 사용 방법, RLock Class, tryLock()메서드 본문

SW Engineering/선착순 이벤트

[Redis] Redisssion 락 사용 방법, RLock Class, tryLock()메서드

Software Engineer Kim 2025. 12. 28. 23:37

Redission 4.0.0버전 기준으로 작성하였습니다.

 

Redis를 이용해서 분산락을 구현 하기 위한 Redisson Lock 특징 정리

  • Ression 락은 Java의 Lock 인터페이스를 구현해서 만들어졌다.
  • Pub/Sub 방식으로 동작한다. (polling 방식 아님X), 락을 얻으려는 쓰레드가 있다면 다른 Ression 인스턴스를 통해 Redis가 알려준다.
  • DeadLock은 watchdog을 두어 방지한다.
    • 만약 한 인스턴스 쓰레드가 락을 획득하고 장애가 발생하면, 락이 영원히 풀리지 않을 수 있는데 watchdog으로 락을 획득한 인스턴스가 살아 있을 동안만 만료시간을 연장한다.
  • leastime을 설정하면 watchdog 동작을 사용하지 않을 수 있다. leastime 시간이 지나면 락이 해제된다.
    • leastime은 tryLock() 메서드 파라미터로 전달하는데, 사용하지 않으려면 -1값을 전달하면 된다. -1로 leastime을 설정하면 watchdog이 활성화된다.

 

Redisson Lock 특징을 고려해 분산락을 구현한다면 아래와 같이 트레이드 오프를 고려할 수 있습니다.

 데이터 정합이 중요한 상황에서 분산락을 구현중이라면 watchdog을 활성화하여 자동으로 Lock 풀리는 상황을 막으면서, 데드랑 상황도 막을 수 있습니다. 반대로 데이터 정합을 어느정도 포기하고 성능이 중요한 경우라면 모니터링을 통해 적절한 leasTime을 설정하여 하나의 쓰레드가 오랫동안 락을 붙잡는 상황을 막을수도 있습니다.

 

 

 

 

 

 

참고 자료 : https://redisson.pro/docs/data-and-services/locks-and-synchronizers/#__tabbed_1_1

 

Locks and synchronizers - Redisson Reference Guide

Locks and synchronizers Lock Valkey or Redis based distributed reentrant Lock object for Java and implements Lock interface. Uses pub/sub channel to notify other threads across all Redisson instances waiting to acquire a lock. If Redisson instance which ac

redisson.pro

https://redisson.pro/docs/configuration/

 

Configuration - Redisson Reference Guide

 

redisson.pro

https://www.javadoc.io/doc/org.redisson/redisson/latest/org/redisson/api/RLock.html#tryLock(long,long,java.util.concurrent.TimeUnit)

Comments