🔔 Redis는 싱글스레드인데 왜 이렇게 빠를까?
2025. 8. 7. 13:15

✅ Redis가 싱글 스레드인데도 빠른 이유

Redis는 기본적으로 명령어 처리에 대해 단일 스레드로 동작함.

멀티 스레드가 더 빠를 것 같지만, 싱글 스레드인 Redis가 더 빠른 이유는 I/O 멀티플렉싱 구조이기 때문.

Redis는 I/O 멀티플렉싱 방식으로, 이벤트 루프가 작업 가능한 요청을 작업 큐에 등록해주면

싱글 쓰레드(Redis 엔진)는 I/O 작업 없이 바로 처리 가능할 수 있음

  • 일반적인 Blocking I/O
    • 문제점 : 커널이 요청을 받아줄 때까지 쓰레드가 대기
    • 예) 점원(커널)이 자기를 봐줄 때까지 손님(쓰레드)이 손을 들고 기다리는 비효율적 구조
  • Non-Blocking I/O 중 epoll()을 사용한 멀티플렉싱 방식(🔔Redis 구조)
    • 소켓이 이벤트 발생 시, 알림을 이벤트 루프에 전송
    • 이벤트 루프가 이 알림을 감지하고 작업 큐에 등록
    • Redis 싱글 스레드는 큐에서 작업만 집중하여 빠르게 처리함
    • 예) 손님(쓰레드)이 손을 드나 안드나 점원(커널)이 체크하는게 아니라,
      손님(쓰레드)이 벨을 울려서 "날 좀 봐주세요"라고 알람을 보냄

 

✅ Redis 6부터 멀티 스레드가 도입됐다던데?

 Redis 6부터는 네트워크 I/O 처리에 한정된 멀티스레드 기능이 도입된 것

  • io-threads 4가 디폴트 : main 스레드 1개 + I/O 스레드 3개
    • 네트워크 I/O : 멀티 스레드 처리
    • 명령어 실행 및 데이터 조작 : 여전히 싱글 스레드
  • 이렇게 제한된 멀티스레드 구조를 선택한 이유?
    : 락 없는 구조의 장점을 유지하면서도,
    클라이언트 수가 많아질 땐 병목이 생기는 네트워크 I/O만 병렬화하여 전체 성능을 높이기 위함

 

✅ Redis가 빠른 진짜 이유 정리!

1. In-memory 구조

  • 모든 데이터를 디스크가 아닌, RAM(메모리)에 저장
  • 디스크 I/O가 없기 때문에, 읽기/쓰기 속도가 매우 빠름
  • O(1) 또는 O(log N) 수준의 빠른 연산만 처리

2. 이벤트 루프(Event Loop) 기반 구조

  • epoll 등을 활용한 비동기 I/O 기반 이벤트 루프
  • 요청 대기 없이 준비된 작업만 처리

3. 락이 없는 구조 (No lock = No context switch)

  • 단일 스레드이므로 락(Lock)이 필요 없음
  • >> 락 경합 및 context switching이 없어서 예측 가능한 고성능

4. 명령어 자체가 빠름

  • 대부분의 빠른 시간 복잡도(O(1) 또는 O(log N))로 구성
  • 예) GET, SET, INCR, HGET, ZADD 등

👩🏻‍🏫참고 : 대용량 서비스에 자주 쓰이는 레디스에 대해 알아보자

LIST