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