Redisの深い道(十二)
Redisサービス
Redisサービス側は、複数のクライアントとネットワーク接続を確立し、クライアントから送信されたコマンド要求を処理し、データベースにコマンド実行結果を保存し、セルフテストシステムを通じて安定したサービスを提供する.
初期化
Redisサービス側の対外サービスには、グローバル・サーバの宣言、構成のロード、データ構造の初期化など、一連の初期化プロセスが必要です.
グローバル・サーバの宣言
redis.c
構成のロード
データ構造の初期化
さらに、初期化には、次のものが含まれます.共有オブジェクトを作成する イベントループを作成し、サーバリスニングポートを開き、ソケット関連接続応答イベントプロセッサのために、クライアント接続 を待つ. serverCronタイムイベント を作成サービススクリプトキャッシュ を初期化する.スロークエリーログ の初期化プライマリスレーブサーバ を初期化する. …
これでRedisサーバの初期化が完了します.
接続リクエストの処理
サーバを初期化すると、応答プロセッサとサーバを接続してソケットのAE_をリスニングします.READALBLEイベント関連、クライアントがconnect関数を使用してサービス側が傍受するソケットを接続する場合、I/Oマルチプレクサはソケットを受信してAE_を生成するREADADBLEイベントは、接続応答プロセッサの実行を開始する.
コマンド要求の処理
クライアント
「ユーザー入力コマンド」>「クライアントがプロトコル形式に変換」>「サービス側に送信」
サービス側ソケット内のプロトコル形式のコマンド要求を読み込みます.>redisClient構造のquerybufバッファに保存します. プロトコルフォーマットのコマンドを解析し、抽出パラメータとパラメータ数をredisClient構造のargvおよびargcプロパティにそれぞれ保存します. コマンドエフェクタを呼び出し、クライアントから送信されたコマンドを実行する.
serverCron
serverCron関数は、サーバのリソースを管理し、サーバの稼働を維持します.
主な役割は次のとおりです.更新サーバイベント 更新アイドルクロック 更新サーバ1秒あたりのコマンド実行回数 サーバメモリピーク記録 を更新する.処理SIGTERM信号 クライアントリソースを管理する データベースリソースの管理 遅延BGREWRITEAOFコマンド を実行する. AOFバッファ内をAOFファイル に書き込む持続化運転状態をチェック 非同期クライアント を閉じる. cronloopsカウンタの値 を増加
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);
// ...
}
さらに、初期化には、次のものが含まれます.
これでRedisサーバの初期化が完了します.
接続リクエストの処理
サーバを初期化すると、応答プロセッサとサーバを接続してソケットのAE_をリスニングします.READALBLEイベント関連、クライアントがconnect関数を使用してサービス側が傍受するソケットを接続する場合、I/Oマルチプレクサはソケットを受信してAE_を生成するREADADBLEイベントは、接続応答プロセッサの実行を開始する.
コマンド要求の処理
クライアント
「ユーザー入力コマンド」>「クライアントがプロトコル形式に変換」>「サービス側に送信」
サービス側
serverCron
serverCron関数は、サーバのリソースを管理し、サーバの稼働を維持します.
主な役割は次のとおりです.