본문 바로가기

Spring

Spring - Redis

 

 

오늘은 Redis에 대해 간략하게 알아보겠습니다. 자세한 내용은 추후에 분산락에 대한 포스팅을 하면서 Kafka 와 RabitMQ와 함께 깊게 다뤄볼 예정입니다.

 

 

Redis 와 Lock 을 이용한 동시성 제어

Redis 란?

 

  • Redis는 Key-Value 기반의 In-Memory 데이터 저장소로, 빠른 읽기/쓰기 성능과 다양한 자료구조를 지원합니다.
  • 데이터를 메모리에 저장해 속도가 매우 빠르며, 간단한 캐싱, 세션 관리, 실시간 데이터 처리 등에 사용됩니다.
  • 주요 특징:
    • NoSQL 데이터베이스로 스키마 없이 사용 가능
    • 다양한 자료구조 (String, Hash, List, Set, Sorted Set 등) 지원
    • Pub/Sub, 트랜잭션, Lua 스크립트 기능 제공

Lock 이란?

 

 

  • Lock은 다수의 프로세스 또는 스레드가 공유 자원을 동시에 접근할 때 경쟁 상태(Race Condition)를 방지하기 위해 사용됩니다.
  • Lock을 사용하면 한 스레드가 자원을 사용하는 동안 다른 스레드가 접근하지 못하게 막을 수 있습니다.

Redis 로 Lock 구현

 

Redis를 사용한 Lock을 분산 락이라고도 합니다. 이를 통해 여러 서버나 프로세스 간에 동시성 문제를 해결할 수 있습니다.

 

1. 구현 원리:

Redis의 SET 명령어를 사용해 Lock을 설정합니다.

SET lock_key "value" NX EX 5
  • NX: Key가 존재하지 않을 때만 설정
  • EX 5: TTL(Time-To-Live)을 5초로 설정 (Lock이 일정 시간이 지나면 자동 해제)

 

2. Lock 획득 실패 시 처리:

 

  • 재시도 로직을 구현하거나 실패 로그를 기록합니다.
  • 예:
if (lockAcquired) {
    // 처리 로직
} else {
    // 재시도 또는 실패 처리
}

 

 

3. Redis Lock 의 장점:

 

  • 분산 환경에서 Lock을 적용 가능
  • 높은 성능과 낮은 대기 시간
  • TTL 설정을 통해 데드락 방지

Lettuce 와 Redisson

 

  1. Lettuce:
    • Redis 클라이언트 라이브러리로, 비동기 및 반응형 프로그래밍을 지원합니다.
    • Lightweight하며, 주로 Spring Data Redis에서 기본으로 사용됩니다.
    • 락 구현 시 직접 SET과 DEL 명령을 사용해 로직을 작성해야 합니다.
  2. Redisson:
    • Redis 클라이언트 라이브러리로, 분산 객체와 분산 서비스를 쉽게 구현할 수 있는 기능을 제공합니다.
    • 분산 락, 세마포어, 큐 등 고급 기능 내장
    • 설정이 Lettuce보다 간단

 

 

 

Key 란?

Redis Lock의 Key는 서버와 작업 간의 고유값이어야 합니다.

  • 예: order:123:lock
  • Key를 특정 작업에 대한 고유값으로 설정해, 다른 Lock과 충돌하지 않도록 만듭니다.
728x90
반응형

'Spring' 카테고리의 다른 글

Spring - Redis 적용 실습  (0) 2024.11.26
Spring - 낙관적 락 & 비관적 락  (0) 2024.11.24
Spring - AWS 로 애플리케이션 배포하기  (0) 2024.11.18
Spring - AWS  (0) 2024.11.17
Spring - DB 와의 상호작용  (1) 2024.11.16