Redis에서의 Lock과 WATCH 명령어 활용하기

gclee·2024년 2월 11일
0

Redis

목록 보기
5/5
post-thumbnail

Redis는 다양한 동시성 문제를 해결하기 위한 메커니즘을 제공합니다. WATCH 명령어와 Lock 패턴은 여러 클라이언트가 동시에 같은 데이터에 접근할 때 일관성을 유지하는 데 유용합니다.

WATCH 명령어

WATCH 명령어는 트랜잭션 처리 과정에서 특정 키를 감시하는 데 사용됩니다. 만약 WATCH로 지정된 키가 다른 클라이언트에 의해 변경되었다면, 이후 실행되는 트랜잭션은 실패하게 됩니다.

WATCH mykey

이후에 MULTI와 EXEC 명령어를 사용하여 트랜잭션을 구성하고, mykey에 대한 변경 사항이 없다면 트랜잭션은 성공적으로 실행됩니다. 만약 mykey가 변경되었다면, EXEC는 nil을 반환하며 트랜잭션은 실행되지 않습니다.

Lock과 withLock 패턴

Redis에서는 Lock을 구현하기 위해 SET 명령어의 NX 옵션과 만료 시간(EX 옵션)을 함께 사용할 수 있습니다. 이를 통해 분산 락을 구현할 수 있으며, withLock 패턴을 사용하여 자원에 대한 접근을 제어할 수 있습니다.

SET lockKey "myLock" NX EX 5

위 명령어는 lockKey가 존재하지 않을 경우에만 "myLock"을 설정하고, 5초 후에 만료되도록 합니다. 이를 통해 다른 클라이언트가 lockKey를 통해 자원에 접근하는 것을 일시적으로 방지할 수 있습니다.

withLock 패턴은 자원에 접근하기 전에 락을 획득하고, 작업이 완료된 후에 락을 해제하는 구조로 구성됩니다. 이 패턴은 다음과 같이 구현할 수 있습니다.

  1. 락 획득 시도
  2. 작업 실행
  3. 락 해제

락 해제는 DEL 명령어를 사용하여 수행할 수 있습니다.

DEL lockKey

0개의 댓글