>  기사  >  데이터 베이스  >  Redis 단일 스레드가 효율적인 이유는 무엇입니까?

Redis 단일 스레드가 효율적인 이유는 무엇입니까?

青灯夜游
青灯夜游원래의
2019-06-17 14:42:596237검색

Redis 단일 스레드가 효율적인 이유는 무엇입니까?

Redis는 단일 프로세스 단일 스레드 모델을 채택한 메모리 기반 키/값 데이터베이스를 사용합니다. 이는 C 언어로 작성되었습니다. 공식적으로 제공되는 데이터는 100,000+ QPS(초당 쿼리 수)에 도달할 수 있습니다. Redis는 왜 이렇게 빠른 걸까요? 그렇게 효율적인가요?

1. 완전히 메모리를 기반으로 하며 대부분의 요청은 순수 메모리 작업이며 매우 빠릅니다. HashMap과 마찬가지로 데이터가 메모리에 저장되는 장점은 검색 및 연산의 시간 복잡도가 O(1)이라는 것입니다.

2. Redis의 구조는 특별히 설계되었습니다.

3. 단일 스레드를 사용하면 불필요한 컨텍스트 전환 및 경쟁 조건이 방지됩니다. CPU를 소비하는 여러 프로세스나 스레드로 인한 전환이 없으며 다양한 잠금 문제를 고려할 필요가 없습니다. 잠금 해제. 교착 상태로 인한 성능 소모 없음

4. 다중 채널 I/O 다중화 모델, 비차단 IO 사용

5. 클라이언트 간 통신을 위한 애플리케이션 프로토콜은 다릅니다. Redis는 자체 VM 메커니즘을 직접 구축합니다. 왜냐하면 일반 시스템이 시스템 기능을 호출하면 이동 및 요청에 일정량의 시간이 낭비되기 때문입니다.

위 사항은 비교적 쉽습니다. 아래에서 이에 대해 이야기해 보겠습니다. 다중 채널 I/O 다중화 모델에 대한 간략한 설명:

다중 채널 I/O 다중화 모델은 다중 스트림의 I/O 이벤트를 모니터링하기 위해 select, poll 및 epoll을 사용합니다. 동시에 유휴 상태에서는 현재 스레드를 차단합니다. 하나 이상의 스트림에 I/O 이벤트가 있으면 차단 상태에서 깨어나므로 프로그램은 모든 스트림을 폴링합니다. 이벤트 발생), 준비된 스트림만 순차적으로 처리합니다. 이 접근 방식은 불필요한 작업을 많이 방지합니다.

여기서 "다중"은 여러 네트워크 연결을 의미하고 "재사용"은 동일한 스레드를 재사용하는 것을 의미합니다. 다중 채널 I/O 다중화 기술을 사용하면 단일 스레드가 여러 연결 요청을 효율적으로 처리할 수 있으며(네트워크 IO의 시간 소모 최소화) Redis는 메모리에서 데이터를 매우 빠르게 처리하므로 메모리에서의 작업이 수행되지 않습니다. Redis의 성능에 영향을 미치는 병목 현상이 발생합니다. 위의 사항은 주로 Redis의 높은 처리량에 기여합니다.

위 내용은 Redis 단일 스레드가 효율적인 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.