Redis

Kkd·2025년 1월 24일
0

매일메일 개념정리

목록 보기
71/93
post-thumbnail

Redis란?

Redis(원격 디렉터리 서버, REmote DIctionary Server)인메모리(In-memory) 기반Key-Value 데이터스토어로, 고성능다양한 데이터 구조를 지원하는 오픈소스 소프트웨어입니다. 데이터가 메모리에 상주하므로 매우 빠른 읽기/쓰기 속도를 자랑하며, 전통적인 캐시뿐만 아니라 다양한 용도로 사용될 수 있습니다. (예: 세션 저장, 실시간 순위표, Pub/Sub, 분산 락 등)

주요 특징

  1. 다양한 데이터 구조
    • 단순 문자열(String)뿐 아니라 List, Set, Sorted Set, Hash, Stream 등 지원.
  2. 고성능
    • 대량의 읽기/쓰기 요청을 매우 빠르게 처리할 수 있음(수십만 ~ 수백만 QPS).
  3. 단순성과 유연성
    • 명령어를 통해 데이터를 다루는 방식이 직관적이고 간결함.
  4. 여러 기능
    • Pub/Sub (발행/구독), Lua 스크립팅, 트랜잭션, Replication, Cluster 모드 지원 등.

Redis가 싱글 스레드로 만들어진 이유

Redis는 기본적으로 싱글 스레드(단일 스레드) 모델로 작동합니다. (최근 버전에서 I/O 멀티스레딩 옵션이 추가되긴 했으나, 핵심 로직은 여전히 싱글 스레드 중심으로 유지됩니다.)

싱글 스레드 모델을 채택한 주요 이유는 다음과 같습니다:

  1. 경합(Concurrency) 제어 간소화

    • 여러 스레드가 동시에 공유 데이터에 접근하면 락(Lock), 동기화 문제 발생.
    • Redis는 싱글 스레드를 사용하므로 데이터 구조에 대한 동시 접근 제어가 필요 없어 복잡도가 크게 감소.
  2. Context Switching 비용 최소화

    • 멀티스레드 환경에서는 스레드 간 Context Switching 비용이 발생.
    • 싱글 스레드에서는 이 비용이 없으므로 CPU 사용 효율이 높음.
  3. 메모리 접근 방식

    • Redis는 메모리에 데이터를 저장해 O(1)에 가까운 읽기/쓰기 수행.
    • 디스크 I/O보다는 메모리 접근이 병목이 덜 발생하며, 단일 스레드로도 충분히 고성능을 낼 수 있음.
  4. 핵심 로직의 단순화

    • 싱글 스레드 모델 덕분에 Redis 내부 코드 구현이 상대적으로 단순.
    • 개발 및 유지보수 편의성이 향상되고, 버그(특히 동시성 버그) 발생 가능성도 낮아짐.
  5. 실제 병목 원인

    • Redis는 대체로 네트워크/메모리 대역폭이 병목이 되는 경우가 많음.
    • 하나의 스레드가 네트워크 I/O와 CPU 모두를 충분히 사용 가능하므로, 멀티스레드로 인한 이점이 크지 않음.

결론적으로,

단일 스레드 모델로도 메모리 기반의 빠른 처리 속도를 달성할 수 있고, 동시성 문제를 단순화하여 안정적이고 효율적인 시스템을 구현할 수 있으므로 Redis는 싱글 스레드로 디자인되었습니다.


Redis 최신 동향: I/O 멀티스레딩

  • Redis 6부터 I/O 멀티스레딩 옵션이 추가되어, 네트워크 I/O 처리만 멀티스레드로 수행 가능.
  • 핵심 명령 처리 로직은 여전히 단일 스레드 기반.
  • 이를 통해 네트워크 병목을 일부 해소하면서도, 내부 데이터 구조 동시성 문제는 최소화.

Redis의 활용 사례

  1. 캐시(Cache)
    • DB 부하를 줄이기 위해 자주 조회되는 데이터 캐싱.
  2. 세션 저장소
    • 로그인 세션 등 사용자 상태 정보를 빠르게 저장/조회.
  3. 순위표(Leaderboard)
    • Sorted Set 구조로 실시간 순위 관리.
  4. Pub/Sub
    • 실시간 메시지 브로커 역할.
  5. 분산 락(Distributed Lock)
    • 여러 서버 간 공유 자원 동기화.

정리

  • Redis는 인메모리 기반으로 초고속 동작하며, 싱글 스레드로 단순하고 강력한 성능을 유지합니다.
  • 복잡한 동기화 없이도 고성능 처리가 가능하며, 실제 병목은 네트워크 I/O나 메모리 대역폭일 때가 많습니다.
  • Redis 6 이후로는 I/O 멀티스레딩이 추가되어 네트워크 병목을 개선했으나, 핵심 로직은 단일 스레드로 작동하여 여전히 일관된 아키텍처를 유지하고 있습니다.

추가 학습 자료

profile
🌱

0개의 댓글