Redis
는 단일 스레드 기반의 이벤트 루프를 통해서 구현되어있다. 이를 통해서 성능 최적화, 복잡성 감소, 데이터 일관성을 유지할 수 있다.
Redis는 싱글 스레드를 이용하므로 위처럼 멀티 스레드 환경에서 발생하는 Race condition
,DeadLock
문제들을 해결할 수 있다.
또한 동기화, Lock 메커니즘없이 이런 이런 문제를 해결할 수 있고, 데이터 일관성을 유지할 수 있다.
Redis db는 메모리 기반 db로써 일반적인 보조기억 장치인 disk에서 동작하는 것과 다르게, 훨씬 빠르게 동작한다.
redis 전체 서버는 위와 같은 구조로 되어있다.
IO이후에 단일 쓰레드 기반 event-loop를 이용하므로, context-switching에서 발생하는 오버헤드를 최소할 수 있다.
만약 이벤트 루프가 없으면, 요청이 전요청이 끝나야 전송되므로, cpu효율성이 떨어진다.
그러나 Redis는 이벤트루프를 이용해서 cpu효율성을 올리므로, 작업들의 대기시간을 줄일 수 있다.
Redis 6.0이상에서는 전송되는 네트워크를 읽는 부분, 전송하는 I/O부분이 멀티스레드로 지원되어있어서, 더욱 빠른 응답을 보장함.
또한 싱글 스레드로 실행하는 부분이 동작 되므로, db의 atomic이 보장됨.