2025 05 19
2025-05-19¶
RedisLock 재고 관리¶
참고: https://turtledev.tistory.com/71
참고: https://turtledev.tistory.com/72
참고: https://techblog.woowahan.com/17416/
참고: https://mangkyu.tistory.com/311
참고: https://velog.io/@rkdalstj4505/Redis-%EB%B6%84%EC%82%B0-%EB%9D%BDLettuce-Redisson
- 해야할 것
- Redis <-> DB 재고 동기화
- Spring에서는
@PostConstructor와 같은 처리로 동기화 해둬야 함.
- 동시성 문제 해결 - 분산락
- 분산락: 락을 획득한 프로세스/스레드만이 임계 영역에 접근!
- 레디스의 분산락은 RedLock
- 레디스가 Replication Mode로 구축되어 있는 경우, 복제 비동기적으로 진행되어 경쟁상태 발생도 가능
- RedLock: N개의 단일 레디스 노드들을 이용하여, Quorom 이상의 노드에서 잠금 획득시, 분산락을 획득한 것으로 판단
- 현재 시간 ms 단위로 가져옴
- 모든 인스턴스에서 순차잠금 획득하려 시도.
- 각 클라이언트는 전체 잠금 자동 해제 시간에 비해 작은 타임아웃을 가지고 잠금 획득.
- 이로써 다운된 redis 노드와 통신을 위해 블로킹되는 것 방지
- 클라이언트는 잠금을 획득하기 위해 경과한 시간 계산
- 클라이언트가 과반이 넘는 인스턴스에서 잠금 획득했고, 경과시간이 잠금 유효시간보다 적다면 획득한 것으로 간주
- 클라이언트 실패시, 잠금 해제하려 시도
- Redis 구현체 비교 - Lettuce
- setnx 활용 스핀락
- 지속적으로 락 획득 시도하기에, CPU 지속적으로 사용
- 단점: CPU 사용량 Up, NW 트래픽 Up
- Redis 구현체 비교 - Redisson
- Redlock 알고리즘 지원
- Pub/Sub 메커니즘을 통한 락 관리
- 효율적 + 자원 소모 적은 방식으로 락 제어
- publisher 메시지 발생, subscriber 특정 주제 구독 발행된 메시지 받음
- 장점: 여러 redis 인스턴스에서 분산락 관리, redlock 알고리즘 쉽게 구현 간으
- 단점: 라이브러리 조금 무거움