지금까지 저는 Redis는 Single Thread라고 알고 있었습니다.
그리고 Single Thread라 Atomic 해 동시성을 보장할 수 있다고 생각하였습니다.
하지만 여러 글들을 보니 Redis는 Single Thread로만 이루어진 게 아니라고 합니다
왜냐하면 Redis 6.0부터 추가된 ThreadedIO가 추가되면서 사용자 명령이 Multi Thread로 동작하기 때문입니다.
ThreadedIO가 적용되는 부분은 다음과 같습니다.
- 클라이언트가 전송한 명령을 네트워크로 읽어서 파싱 하는 부분
- 명령이 처리된 결과 메시지를 클라이언트에게 네트워크로 전달하는 부분
이제, Redis 내부 사진을 보며 하나하나씩 이해해 보겠습니다.
먼저 클라이언트의 Socket이랑 Redis의 Socket이랑 연결을 한다. 이때 Multi Thread가 사용이 됩니다.
클라이언트가 Redis의 연결이 되면 Event Loop는 데이터에 대한 연결을 모니터링한다.
Event Loop는 다중 클라이언트의 연결 진행을 차단하지 않고, 작업을 비동기적으로 수행하며, Socket을 통해 클라이언트로부터 데이터가 들어오면 Event Loop가 반응하고, 그 유형에 따라 처리한다.
그 이후 Task Queue로 이동하여 작업을 순차적으로 처리하거나 우선순위를 지정할 수 있다.
즉, 부분적으로 Multi Thread이고, 명령의 실행 자체는 Single Thread인 것입니다.
'WEB' 카테고리의 다른 글
배포 서버없이 프론트단과 백단 통신하기 (3) | 2024.08.27 |
---|---|
HTML이 웹 브라우저에서 어떻게 작동할까? (1) | 2024.08.26 |
전략 패턴을 사용해 로그인 추상화 하기 (0) | 2024.08.08 |
@NoArgsConstructor 액세스 레벨을 PROTECTED로 하는 이유 (1) | 2024.06.09 |
Redis Lock 동시성 해결하기 (0) | 2024.05.01 |
인터셉터와 리졸버 (0) | 2024.04.12 |
JWT 활용기 (0) | 2024.04.12 |
Oauth를 사용해 카카오 로그인 구현 (0) | 2024.04.12 |