Redis는 단일 프로세스 단일 스레드 모델을 사용하고 C 언어로 작성된 메모리 기반 KV 데이터베이스를 사용합니다. 제공된 공식 데이터는 100000+ qps에 도달할 수 있다는 것입니다. 이 데이터는 단일 프로세스와 멀티스레딩을 사용하는 동일한 메모리 기반 KV 데이터베이스인 Memcached보다 나쁘지 않습니다.主要Redis의 주된 이유는 다음과 같습니다.
(권장 학습:Redis 비디오 튜토리얼 ) 은 완전히 메모리를 기반으로 합니다.
데이터 구조가 간단하고 데이터 작업도 간단합니다.자세한 내용은 다루지 않겠습니다. 첫 번째와 두 번째 지점이지만 주로 다중 채널 I/O 다중화 기술을 사용하여 세 번째 지점에 중점을 둡니다.
다중 채널 I/O 다중화 모델은 select, poll 및 epoll을 사용하여 여러 스트림의 I/O 이벤트를 동시에 모니터링합니다. 유휴 상태일 때 현재 스레드가 차단됩니다. 스트림에는 I/O 이벤트가 있고 차단 상태에서 깨어나므로 프로그램은 모든 스트림을 폴링하고(epoll은 실제로 이벤트를 생성한 스트림만 폴링함) 준비된 스트림만 순서대로 처리합니다. 운영. 여기서 "다중"은 여러 네트워크 연결을 의미하고 "재사용"은 동일한 스레드를 재사용하는 것을 의미합니다. 다중 채널 I/O 다중화 기술을 사용하면 단일 스레드가 여러 연결 요청을 효율적으로 처리할 수 있으며(네트워크 IO의 시간 소모 최소화) Redis는 메모리에서 데이터를 매우 빠르게 작동합니다(여기서 메모리 내 작업은 문제가 되지 않습니다). ). 성능 병목 현상), 위의 두 가지 점은 주로 Redis의 높은 처리량에 기여합니다.Memcached와 달리 Redis는 Libevent를 직접 사용하지 않지만 select, epoll, evport 및 kqueue와 같은 일반적인 인터페이스의 매우 가벼운 구현을 완성합니다.
다양한 시스템 호출에 적합한 인터페이스를 선택하세요. Linux의 기본값은 epoll입니다. Libevent는 비교적 무겁고 범용적이기 때문에 코드의 양이 매우 많고 Redis가 사용할 수 없는 기능이 많기 때문에 "가벼움"을 추구하고 종속성을 제거하기 위해 Redis는 자체적으로 캡슐화하기로 결정했습니다.단일 프로세스와 단일 스레드의 장점
코드가 더 명확해지고 처리 로직이 더 단순해짐다양한 잠금 문제를 고려할 필요가 없고 잠금 및 잠금 해제 작업이 없으며 성능 소모가 없습니다. 교착상태 발생CPU 성능을 소모하는 멀티 프로세스나 멀티 쓰레드로 인한 전환이 없습니다
싱글 프로세스와 싱글 쓰레드의 단점
멀티 코어 CPU 성능을 최대한 발휘할 수는 없지만, 단일 머신에서 여러 Redis 인스턴스를 열면 개선될 수 있습니다.위 내용은 Redis 단일 프로세스가 빠른 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!