복붙노트

[REDIS] 어떻게 레디 스 높은 처리량과 성능을 달성 하는가?

REDIS

어떻게 레디 스 높은 처리량과 성능을 달성 하는가?

나는 이것이 매우 일반적인 질문 알고있다. 그러나, 나는 놀라운 성능 한계에 일에 (memcached를, 카산드라와 같은 또는 캐시) 레디 스를 허용 주요 건축 결정이 무엇인지 이해하고 싶었다.

기본적으로, 명령과 레디 스 상자에 응답 할 수있는 메모리 캐시 및 서버와 기계의 일반 바닐라 구현의 차이는 무엇인가? 나는 또한 대답은 매우 거대 할 필요가 있고 완성을위한 매우 복잡한 세부 사항을 포함해야 함을 이해합니다. 하지만, 내가 무엇을 찾고있어 모든 뉘앙스보다는 사용되는 일반적인 기술이다.

해결법

  1. ==============================

    1.어떻게 작동하는지 이해하는 레디 스 문서에있는 정보의 풍부한이있다. 이제, 특히 귀하의 질문에 대답 :

    어떻게 작동하는지 이해하는 레디 스 문서에있는 정보의 풍부한이있다. 이제, 특히 귀하의 질문에 대답 :

    1) 어떻게 연결이 유지됩니다?

    연결 유지합니다 (레디 스 작성자 설계)가 AE 이벤트 루프를 사용하여 관리된다. 모든 네트워크 I / O 작업은 비 차단합니다. 당신은 등 libevent, libev, libuv처럼 최고의 네트워크 I / O 역 다중화 플랫폼의 메커니즘을 사용하여 최소한의 구현 (등 리눅스, BSD에 대한 kqueue, 대한는 epoll을 ...) 등의 AE를 볼 수 있습니다 ...

    2) 연결은 TCP 또는 HTTP 있습니까?

    연결은 TCP 간단한 텔넷 호환되는 레디 스 프로토콜을 사용하는 텍스트가 바이너리 데이터를 지원하는 프로토콜을 지향. 이 프로토콜은 일반적으로 HTTP보다 더 효율적이다.

    3) 어떻게 메모리를 관리?

    메모리는 범용 메모리 할당에 의존에 의해 관리됩니다. 일부 플랫폼에서이 실제로 시스템 메모리 할당입니다. 이 CPU의 소비, 동시성 지원, 조각 및 메모리 풋 프린트 사이의 적절한 균형을 제공하기 때문에 (리눅스를 포함한) 다른 플랫폼에서 jemalloc가 선택되었습니다. jemalloc 소스 코드는 레디 스 분포의 일부입니다.

    (예 : memcached를 같은) 다른 제품과는 달리, 레디 스에서 슬랩 할당 전혀 구현이 없습니다.

    최적화 된 데이터 구조의 수는 메모리 공간을 감소시키는 범용 할당 위에 구현되어왔다.

    4) 읽기 / 쓰기를 경쟁의 높은 처리량 inspite를 달성하는 데 사용되는 동기화 기술은 무엇인가?

    레디 스는 단일 스레드 이벤트 루프, 그래서 모든 명령이 연재되기 때문에 수행 할 동기화가 없습니다. 이제, 일부 스레드는 내부 목적을 위해 백그라운드에서 실행됩니다. 드문 경우에 그들은 메인 스레드에 의해 관리되는 데이터, 고전 pthread와 동기화 기본은 (예를 들어 뮤텍스를) 사용에 액세스 할 수 있습니다. 그러나 데이터의 100 % 모든 동기화를 필요로하지 않는 다수의 클라이언트 연결을 대신했다 액세스합니다.

    당신이 더 많은 정보를 찾을 수 있습니다 : 레디 스는 단일 스레드이며, 다음 어떻게 동시 I / O 작업을 수행합니까?

    명령과 레디 스 상자에 응답 할 수있는 메모리 캐시 및 서버와 기계의 일반 바닐라 구현의 차이점은 무엇입니까?

    다른 점이 없다. 레디 스 명령에 응답 할 수 있습니다 메모리에 캐시와 서버 기계의 일반 바닐라 구현입니다. 그러나 바로 이루어집니다 구현은 다음과 같습니다

  2. from https://stackoverflow.com/questions/27268182/how-does-redis-achieve-the-high-throughput-and-performance by cc-by-sa and MIT license