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

주요 특징
- 다양한 데이터 구조
- 단순 문자열(String)뿐 아니라 List, Set, Sorted Set, Hash, Stream 등 지원.
- 고성능
- 대량의 읽기/쓰기 요청을 매우 빠르게 처리할 수 있음(수십만 ~ 수백만 QPS).
- 단순성과 유연성
- 명령어를 통해 데이터를 다루는 방식이 직관적이고 간결함.
- 여러 기능
- Pub/Sub (발행/구독), Lua 스크립팅, 트랜잭션, Replication, Cluster 모드 지원 등.
Redis가 싱글 스레드로 만들어진 이유
Redis는 기본적으로 싱글 스레드(단일 스레드) 모델로 작동합니다. (최근 버전에서 I/O 멀티스레딩 옵션이 추가되긴 했으나, 핵심 로직은 여전히 싱글 스레드 중심으로 유지됩니다.)
싱글 스레드 모델을 채택한 주요 이유는 다음과 같습니다:
-
경합(Concurrency) 제어 간소화
- 여러 스레드가 동시에 공유 데이터에 접근하면 락(Lock), 동기화 문제 발생.
- Redis는 싱글 스레드를 사용하므로 데이터 구조에 대한 동시 접근 제어가 필요 없어 복잡도가 크게 감소.
-
Context Switching 비용 최소화
- 멀티스레드 환경에서는 스레드 간 Context Switching 비용이 발생.
- 싱글 스레드에서는 이 비용이 없으므로 CPU 사용 효율이 높음.
-
메모리 접근 방식
- Redis는 메모리에 데이터를 저장해 O(1)에 가까운 읽기/쓰기 수행.
- 디스크 I/O보다는 메모리 접근이 병목이 덜 발생하며, 단일 스레드로도 충분히 고성능을 낼 수 있음.
-
핵심 로직의 단순화
- 싱글 스레드 모델 덕분에 Redis 내부 코드 구현이 상대적으로 단순.
- 개발 및 유지보수 편의성이 향상되고, 버그(특히 동시성 버그) 발생 가능성도 낮아짐.
-
실제 병목 원인
- Redis는 대체로 네트워크/메모리 대역폭이 병목이 되는 경우가 많음.
- 하나의 스레드가 네트워크 I/O와 CPU 모두를 충분히 사용 가능하므로, 멀티스레드로 인한 이점이 크지 않음.
결론적으로,
단일 스레드 모델로도 메모리 기반의 빠른 처리 속도를 달성할 수 있고, 동시성 문제를 단순화하여 안정적이고 효율적인 시스템을 구현할 수 있으므로 Redis는 싱글 스레드로 디자인되었습니다.
Redis 최신 동향: I/O 멀티스레딩
- Redis 6부터 I/O 멀티스레딩 옵션이 추가되어, 네트워크 I/O 처리만 멀티스레드로 수행 가능.
- 핵심 명령 처리 로직은 여전히 단일 스레드 기반.
- 이를 통해 네트워크 병목을 일부 해소하면서도, 내부 데이터 구조 동시성 문제는 최소화.
Redis의 활용 사례
- 캐시(Cache)
- DB 부하를 줄이기 위해 자주 조회되는 데이터 캐싱.
- 세션 저장소
- 로그인 세션 등 사용자 상태 정보를 빠르게 저장/조회.
- 순위표(Leaderboard)
- Sorted Set 구조로 실시간 순위 관리.
- Pub/Sub
- 분산 락(Distributed Lock)
정리
- Redis는 인메모리 기반으로 초고속 동작하며, 싱글 스레드로 단순하고 강력한 성능을 유지합니다.
- 복잡한 동기화 없이도 고성능 처리가 가능하며, 실제 병목은 네트워크 I/O나 메모리 대역폭일 때가 많습니다.
- Redis 6 이후로는 I/O 멀티스레딩이 추가되어 네트워크 병목을 개선했으나, 핵심 로직은 단일 스레드로 작동하여 여전히 일관된 아키텍처를 유지하고 있습니다.
추가 학습 자료