레디 스 클라이언트에서

레디 스 클라이언트 서버 프로그램으로, 서버는 데이터 저장 서비스를 제공하는 등, 클라이언트 연결 서버에 서버 및 전송 명령을 통해이 읽거나 간단한 용어의 데이터를, 쓰기, 클라이언트는 도구이다 우리 레디 스 서버와 완전한 데이터 조작과 그것을 통해 통신합니다.

레디 스 코어 클라이언트가 핵심이 레디 스 서버 프로그램이다, 아니다, 서버 프로그램은 완벽한 데이터 예금, 인출, 지속성, 그리고 우리가 자주 연기자 다양한 작업을 사용하므로. 그러나 클라이언트 효과 없음의 레디 스 서비스 시스템 전반에 걸쳐 클라이언트도 매우 중요한 부분입니다 것을 의미하지 않는다. 의 일부를 살펴 Benpian 것은 레디 스 클라이언트와 원칙의 실현을 갖추고 있습니다.

첫째, 클라이언트의 기본 속성

추상적 인 데이터 구조, server.h / 클라이언트 아키텍처에 대한 레디 스 클라이언트, 내가 레디 스-4.0.x의 버전, 다른 버전이 약간 다를 수 있습니다 여기에 오전, 각 레디 스 클라이언트가 성공적으로 서버 후 서버에 연결 구조 인스턴스 클라이언트를 생성하고 클라이언트의 모든 연결이 성공에 대한 링크의 연결리스트의 형태이다.

이러한 현재의 명령과 고객 서비스, 많은 정보에 서버가 실행될 때 주요 역할은 매우 중요 속성, 소켓, 이름, 로고 등의 상태 정보를 고객의 다수의 현재 구조를 저장하는 것입니다 매개 변수는 여기에 사용할 수 있습니다. 우리는 하나 하나 이해합니다.

1, 클라이언트 이름

기본적으로 모든 연결은 이름없이 성공적으로 클라이언트, 당신은 서비스에 보낼 수 있습니다 목록 클라이언트 가 성공적으로 클라이언트뿐만 아니라 자신의 기본 정보를 설정 한 현재 서버를 반환하는지 확인하는 명령. 예를 들면 :

영상

당신은 이름 필드는 클라이언트의 인식의 높은 수준을 원한다면, 당신은 서버에 보낼 수 있습니다 기본적으로 비어 볼 수 있습니다 클라이언트 SETNAME 내가 프리젠 테이션을하지 않을 것이다, 당신의 클라이언트로 명명하고, 클라이언트의 이름 이름 필드의 클라이언트 구조에 저장되어있는 정보.

typedef struct client {
    .........
    robj *name;             /* As set by CLIENT SETNAME. */           
    .........
} client;

复制代码

2, 마크

일부 상태 플래그는 전류를 설명하는 데 사용되거나 역할은 클라이언트가 데이터 필드 구조에 대응하는 정수이고, 레디 스.

typedef struct client {
    .........
    int flags;              /* Client flags: CLIENT_* macros. */
    .........
} client;

复制代码

레디 스는 고객 기호의 많은에 정의되어 있습니다

영상

의해 플래그 필드 정수, 바이너리 또는 (|) 예를 들어, 상태 이상 동시에 저장 :

flags = 0000 0110 = CLIENT_MASTER | CLIENT_MONITOR
复制代码

물론, flages 단지 예를 인용 한 상기 값 것으로, 현재의 클라이언트를 설명하는 마스터 노드 서버는 (경우에 노드에서 마스터 사본, 마스터 노드는 노드로부터 클라이언트로 클라이언트를 송신 RDB 파일로 연결할 ) 및 MONITOR 명령어를 실행하고있다. 전자는 후자는 클라이언트의 상태를 설명 클라이언트의 역할을 설명합니다.

모두 모두, 클라이언트의 현재의 역할을 설명 할 수있는 클라이언트 플래그 필드를 레디 스, 클라이언트는 또한 모든 종류의 현재 상태 정보를 기록 할 수 있습니다, 서버가 클라이언트의 정보는 매우 중요한 분야입니다 이해할 수있다.

(3), 입력 / 출력 버퍼

클라이언트의 요청에 의해 전송 명령을 수신하는 레디 스 서버를 처리하고 해당 명령 호출 및 클라이언트에 최종 데이터를 다시 구현하는 많은 단계를 요구하고, 입력 버퍼는 실제로 클라이언트가 송신 기억하는 작은 메모리이며 매개 변수를 포함하여 명령을 통해, 기본적으로이 메모리 공간, 그렇지 않으면 서버가 클라이언트에 대한 연결을 닫습니다 강요 당할 것이다 레디 스 1 기가 바이트를 초과 할 수 없습니다.

typedef struct client {
    .........
    sds querybuf;           /* Buffer we use to accumulate client queries. */
    .........
} client;

复制代码

querybuf 필드의 SDS 타입 클라이언트 버퍼, 그때 이것은 동적 입력 버퍼를 확장이라고 언급한다.

물론, 우리는 또한 클라이언트리스트 querybuf 분포와 현재 클라이언트의 사용을 볼 수 있습니다.

영상

상기 qbuf qbuf없는 클라이언트 입력 버퍼의 상태를 설명하는 데 사용된다. 그래서 querybuf 여기에만 32,768 바이트를 할당,이 대형 명령 여기에 작성하지 않았습니다.

PS : 더 maxmemory 제한보다, 그것은 LRU KEY가 제거 또는 프로그램 예외 게재 할 경우 너무 많은 키를 사용하지 않도록하려고,이 클라이언트가 너무 많은 메모리를 차지 querybuf의 원인이됩니다,이 레디 스 서버 프로그램 메모리 풋 프린트로 이어질 것은 너무 높습니다.

또한, 클라이언트뿐만 아니라 서버 응답 응답을 캐시하기위한 출력 버퍼를 레디 스.

OK, 에러 정보 : 출력 버퍼는 두이 있으며, 하나의 간단한 예에 응답하여 상기 서버에 저장하기위한 고정 된 크기이다. 고정되지 않은 버퍼 길이의 한 종류의 길이는 더 이상 반응의 일부 내용을 저장하기 위해 동적으로 확장이 가능 있습니다.

typedef struct client {
    .........
    /* Response buffer */
    int bufpos;
    char buf[PROTO_REPLY_CHUNK_BYTES];
    .........
} client;

复制代码

PROTO_REPLY_CHUNK_BYTES 16 * 1024, 기본 출력 버퍼는 고정 16K 갖는다 동일, bufpos 버퍼에서 사용되는 바이트의 수는 고정되어 기록한다.

typedef struct client {
    .........
    list *reply;            /* List of reply objects to send to the client. */
    .........
} client;

复制代码

동적 당신은 목록, 세트의 일부, 예를 들어, 우리를 위해 컬렉션을 큰 키를 반환 등 수, 달성하기 위해 목록을 연결 버퍼입니다. 우리는 클라이언트 목록 명령을 통해 출력 버퍼의 사용을 볼 수 있습니다.

영상

OBL은 omem 점유 총 바이트 버퍼 고정 및 동적 버퍼를 나타내며, 고정 버퍼 길이 OLL 대표 동적 버퍼 길이를 나타낸다.

PS : 원인 레디 스 서버 메모리와 같은 불량이 급증하는 경우, 클라이언트 출력 버퍼 한도를 설정하여 최대 상한을 제한 할 수있는 출력 버퍼 메모리는, 상기 출력 버퍼의 약간 작은 크기를 구성 할 것을 권장.

고객의 두 번째, 세 가지 유형

레디 스 클라이언트는 세 가지 유형의 공통 클라이언트, 게시 가입 클라이언트, 종속 클라이언트로 구분. 물론 고객의 가장 일반적인 클라이언트는 우리가 사용할 수도, 말할 수 있습니다.

레디 스 클라이언트는 채널 서버에 가입하면 레디 스가-회원님의 사이트에 대한 채널 새 메시지는 서버가 당신에게 밀어 때, 당신의 클라이언트는 또한, 가입 클라이언트를 게시 할 채널의 수를 구독 할 수 있습니다 기능, 우리는 후속 것이다 세부 사항.

또한 종속 클라이언트로 알려진 마스터 - 슬레이브의 배포, 서버에서 모든 노드가, 그들이 정기적으로 마스터에 대한 최신 데이터를 가져 오는 경우 클러스터 노드를 레디 스하면 상세한 내용 설명을 따르십시오.

우리는 레디 스 서버 프로그램 구현하고 신비 serverCron 타이머 기능 구현을 분석하고 다음으로.


공공 관심사는 프로그래머를 공유하고, 사랑을 손실되지 않습니다.
대중 "1024"저자 플러스 마이크로 채널에 어떤 응답은 학습 탐구 없습니다!
모든 경우에 사용 된 각 문서 코드는 물질 내 개인 github에 업로드됩니다
github.com/SingleYam/o...
트레드에 오신 것을 환영합니다!

있는 공개 YangAM 없습니다

추천

출처juejin.im/post/5e6a3b1d6fb9a07c9f3ff291