Redisの深い道(十二)


Redisサービス
Redisサービス側は、複数のクライアントとネットワーク接続を確立し、クライアントから送信されたコマンド要求を処理し、データベースにコマンド実行結果を保存し、セルフテストシステムを通じて安定したサービスを提供する.
初期化
Redisサービス側の対外サービスには、グローバル・サーバの宣言、構成のロード、データ構造の初期化など、一連の初期化プロセスが必要です.
グローバル・サーバの宣言
redis.c
/* Global vars */
struct redisServer server; /* server global state */

構成のロード
void initServerConfig(void) {
    //        ID
    getRandomHexChars(server.runid,REDIS_RUN_ID_SIZE);

    //           
    server.configfile = NULL;

    //          
    server.hz = REDIS_DEFAULT_HZ;

    //    ID     
    server.runid[REDIS_RUN_ID_SIZE] = '\0';

    //          
    server.arch_bits = (sizeof(long) == 8) ? 64 : 32;

    //           
    server.port = REDIS_SERVERPORT;

    // ...
}

データ構造の初期化
void initServer(void) {
    // ...

    //          ID
    server.pid = getpid();

    //          NULL
    server.current_client = NULL;

    // redisClient       ,                    
    server.clients = listCreate();

    //         
    server.slaves = listCreate();

    // db  ,           
    server.db = zmalloc(sizeof(redisDb)*server.dbnum);

    // ...
}

さらに、初期化には、次のものが含まれます.
  • 共有オブジェクトを作成する
  • イベントループを作成し、サーバリスニングポートを開き、ソケット関連接続応答イベントプロセッサのために、クライアント接続
  • を待つ.
  • serverCronタイムイベント
  • を作成
  • サービススクリプトキャッシュ
  • を初期化する.
  • スロークエリーログ
  • の初期化
  • プライマリスレーブサーバ
  • を初期化する.

  • これでRedisサーバの初期化が完了します.
    接続リクエストの処理
    サーバを初期化すると、応答プロセッサとサーバを接続してソケットのAE_をリスニングします.READALBLEイベント関連、クライアントがconnect関数を使用してサービス側が傍受するソケットを接続する場合、I/Oマルチプレクサはソケットを受信してAE_を生成するREADADBLEイベントは、接続応答プロセッサの実行を開始する.
    コマンド要求の処理
    クライアント
    「ユーザー入力コマンド」>「クライアントがプロトコル形式に変換」>「サービス側に送信」
    サービス側
  • ソケット内のプロトコル形式のコマンド要求を読み込みます.>redisClient構造のquerybufバッファに保存します.
  • プロトコルフォーマットのコマンドを解析し、抽出パラメータとパラメータ数をredisClient構造のargvおよびargcプロパティにそれぞれ保存します.
  • コマンドエフェクタを呼び出し、クライアントから送信されたコマンドを実行する.

  • serverCron
    serverCron関数は、サーバのリソースを管理し、サーバの稼働を維持します.
    主な役割は次のとおりです.
  • 更新サーバイベント
  • 更新アイドルクロック
  • 更新サーバ1秒あたりのコマンド実行回数
  • サーバメモリピーク記録
  • を更新する.
  • 処理SIGTERM信号
  • クライアントリソースを管理する
  • データベースリソースの管理
  • 遅延BGREWRITEAOFコマンド
  • を実行する.
  • AOFバッファ内をAOFファイル
  • に書き込む
  • 持続化運転状態をチェック
  • 非同期クライアント
  • を閉じる.
  • cronloopsカウンタの値
  • を増加