Redis는 빠른 인메모리 데이터 저장소로 유명하다. 그런데 놀랍게도 Redis는 기본적으로 싱글 스레드(single-threaded) 구조로 동작한다. 멀티스레드가 대세인 환경에서, 왜 Redis는 싱글 스레드를 고수하는 걸까?
Redis의 핵심 목표는 고속 성능이다. 이를 달성하기 위해 Redis는 다음과 같은 선택을 했다:
이러한 구조는 병목 없이 요청을 빠르게 처리할 수 있다는 장점을 가진다.
멀티스레드 환경에서는 공유 데이터에 접근할 때 동기화(락)가 필요하다. 하지만 락은 다음과 같은 비용을 유발한다:
Redis는 이러한 복잡함을 피하고자 싱글 스레드로 순차 처리를 선택했다. 이로 인해 모든 명령이 순서대로, 빠르게, 안전하게 실행된다.
싱글 스레드는 하나의 CPU 코어에만 의존하기 때문에, 캐시 지역성(locality)이 높아진다.
이는 메모리 접근 성능을 높이는 데 유리하다.
복잡한 스레드 동기화 코드를 제거함으로써 Redis는 코드 구조가 간결해졌고,
성능 튜닝 및 유지보수가 쉬워졌다.
Redis가 싱글 스레드라고 해서 느린 건 아니다. 그 이유는 다음과 같다:
Redis는 주요 로직은 싱글 스레드로 처리하지만, 일부 작업은 멀티 스레드로 보완하고 있다:
I/O 멀티스레딩
기능도 선택적으로 지원 (읽기/쓰기 분산 처리)즉, 핵심 처리 흐름은 싱글 스레드, 부가 작업은 멀티 스레드 구조로 확장 중이다.