본문 바로가기

Project

레디스를 활용한 동시성 문제 해결 Lettuce vs Redisson

 

레디스를 활용하여 동시성 문제를 해결할 때 사용하는 대표적인 두 가지

- Lettuce

- Redisson

    

Lettuce


  • setnx 명령어를 활용하여 분산락 구현
  • set if not exist의 줄임말로 키와 밸류를 set 할 때 기존의 값이 없을 때만 set 하는 명령어이다.
  • spinLock방식이므로 retry 로직을 개발자가 작성해주어야 한다.

♚ spin Lock이란?

락을 획득하려는 스레드가 락을 사용할 수 있는지 반복적으로 확인하면서 락 획득을 시도하는 방식이다. 락이 해제될 때까지 계속해서 시도하므로, 락을 빠르게 획득할 수 있지만 시스템에 부하를 줄 수 있다.

 

적용 코드 )

 

레디스락을 사용하는 파사드패턴 재고감소 서비스
레디스 락 획득 해제 명령어를 사용하기 위한 repository

Redisson


  • pub/sub 기반으로 lock 구현 제공
    • Pub/Sub 방식: 채널을 하나 만들고 락을 점유 중인 스레드가 락을 획득하려고 대기 중인 스레드에게 해제를 알려주면 안내를 받은 스레드가 락 획득 시도를 하는 방식이다.
    • retry 로직을 개발자가 작성해주지 않아도 된다.
    • pub/sub 방식이므로 lettuce와 비교했을 땐 Redis에 부하가 덜 간다.
    • 락 획득 재시도를 기본으로 제공한다.

https://mvnrepository.com/artifact/org.redisson/redisson-spring-boot-starter

사이트에서 버전에 맞는 redisson 의존성을 주입시켜줘야 한다.

 

redisson 같은 경우엔 락 관련된 클래스들을 라이브러리에서 제공해 주므로 우리가 별도의 레포지토리를 작성하지 않아도 된다.

하지만 로직 실행 전 후로 락 획득 해제는 해줘야 하므로 퍼사드 클래스를 생성해 주도록 하겠다.

 

redisson을 활용한 분산락

 

실무에서는 

- 재시도 필요 -> redisson

- 재시도 필요 X -> lettuce

 

'Project' 카테고리의 다른 글

레이스 컨디션  (0) 2024.08.01