深Redisのコマンド実行

深Redisのコマンド実行

Redisのサーバー:データベースへの実行コマンドによって生成されたデータを保存しながら、複数のクライアントに接続されたサーバの実装Redisの側、および処理要求には、クライアント、クライアントから送信されました。Redisのサーバーが動作を維持するために、エクスプローラを依存している、その主な役割は、Redisのサービスを管理することです。

プロセス・サーバーの処理コマンド

私たちは、最終顧客にコマンドを送信します。SET市「北京」

ユーザコマンドSET市「北京」は、クライアントを入力します。最初のステップは、クライアントは、このコマンドを受信します。
サーバに受信ステップクライアント最初のコマンドプロトコルフォーマットを識別し、サーバーへのソケットを使用することができ、サーバへのプロトコル形式正当な要求を変換するコマンド。

ファイル

サーバは、第三の工程をクライアント上のプロトコルデータ伝送を受信すると、クライアントとサーバー間のソケット接続が読み取り可能となり、このとき、サーバは、次の手順を実行するためにプロセッサを要求するコマンドを起動します。

3.1ソケット・サーバ・プロトコル・フォーマットは、要求コマンド、入力バッファに格納されたクライアント状態へ、次いでリード要求コマンドを読み出します。

入力バッファコマンドの3.2対が要求を解析し、パラメータおよびパラメータ要求コマンドの数を取得し、ARGCおよびargv属性クライアントステータスに格納されています。

3.3 CALLコマンドの実行、クライアントの要求により送信された実行コマンド。


コマンド実行は、あろう最初の[0]パラメータルックアップテーブルのargvコマンド(コマンドテーブル)内のクライアント状態に応じてクライアントによって送信されたコマンド実行要求時のコマンドパラメータで指定され、見つかりましたクライアントの状態へのコマンドは、属性や関連決意をcmdを保存、例えば、CMDポインタクライアントの状態がNULLを指している決定、またはクライアントの身元を確認し、に関連するコマンドの機能の実行を実現するための最後の呼び出し、同じように検証するか否かを判定されますコマンド実行アクチュエータであるコマンド。


、辞書の値が1つのredisCommand構造であり、各redisCommand、コマンドテーブルには、辞書のキーは、「セット」、「zadd「サッド」」などのように、コマンドの名前であるRedisのコマンドを記憶するための辞書であります記録情報を対応するコマンドの構造を実現しました。複数の属性を有するr​​edisCommand構造は、次の通り。

●name属性は:*などCHAR型のSET、GET、として、コマンドの名前を示します。

●PROC特性:それは関数ポインタであり、機能はポイントコマンドを実装するために使用される、例えば、点redisCommandProcのある機能setCommand SETコマンド、実装するタイプ、および型定義(redisClientとして定義redisCommandProc redisCommandProcのタイプは、空隙 C)。

●アリティ特性:それはコマンドパラメータの数、正しい形式を決定するためのコマンド要求を示すINT整数型です。値が負の属性のアリティのであれば-N、コマンド引数の数がより大きい表すNここではパラメータの数は、例えば、SET市「北京」、コマンド名自体が含まれ、このコマンドのパラメータの数、すなわち「SET」、「都市」、3であることをしてくださいノート「北京」。

●sflags特性:それは、記録コマンドの複数の識別子を有する特性を有し、*ストリングタイプ識別値チャーです。

●フラグ特性:それは整数int型、分析から引き出された識別sflagsのバイナリ識別、プログラムによって自動的に生成されたバイナリの識別です。サーバ識別コマンドのチェックがフラグ属性を使用している場合。

。●呼び出し属性:この属性は、何回サーバーをカウントするために使用され、このコマンドを実行し、それは長い長い整数型です。

●ミリ秒属性:消費、このコマンドの合計時間を実行する。この属性の統計サーバは、それは長い長い整数型です。

各コマンドは、redisCommand Redisの対応する構造を有する上記関連属性を有しています。

sflags属性は、次の特定の識別子を持っています。

●:属性値a、これはコマンドRedisの管理コマンドを示します。関連するコマンドは、SAVE、BGSAVE、SHUTDOWNなどです。

●L:属性値Lは、サーバプロセスの負荷データに使用されるコマンドを指します。関連するコマンドはようにSUBSCRIBE、PUBLISHと、INFOです。

●M:属性値m、実行のために記載された方法は、大量のメモリを消費することができます。実施に先立ち、不十分ならば、我々は、サーバーのメモリサイズと使用状況を判断するために、サーバーのメモリリソースを必要とし、コマンドを実行することを拒否します。関連するコマンドは、SET、SADD、APPEND、RPUSH、LPUSHなどです。

●M:コマンドを表す属性値Mは、自動的にモニタモードでのRedisを伝播されません。関連するコマンドはEXECです。

●P:ニュースリリースのサブスクリプションに関連したpのプロパティ値、およびRedisの説明このコマンドは機能します。関連するコマンドは上のように、PubSubのは、PSUBSCRIBE、PUNSUBSCRIBEは、SUBSCRIBE、UNSUBSCRIBEを公開しています。

●R:属性値r、読み取り専用、読み取り専用これは、関連するデータを取得するためのコマンドであり、それはデータベースを変更しないと述べました。関連するコマンドは、GET、STRLEN、EXISTSなどをしています。

●R:同一のデータセットと同じパラメータを処理するときにランダムコマンド記述である属性値Rは、、、結果はランダムです。関連するコマンドはSPOP、SSCAN、RANDOMKEYなどです。

●S:Sの属性値、彼らはLuaのでコマンドスクリプトを使用することはできません。関連するコマンドはBLPOP、BRPOP、SPOP、BRPOPLPUSHなどです。

●S:属性値S、これはLuaのに使用されるコマンドスクリプトを表します。あなたはLuaのスクリプトでこのコマンドを使用すると、結果の出力があること、結果の出力が発注され、ソートされます。関連するコマンドはKEYS、SUNION、SDIFF前記焼結体、SMEMBERSとそうです。

●T:古くなったデータとともに使用を可能にしながら属性値がTであり、サーバからのコマンドを指します。関連するコマンドは、PING、INFO、SLAVEOFなどです。

●W:書き込むことができ、wは属性値が、説明された書き込みコマンドは、それがデータベースを変更することができます。関連するコマンドは、SET、DEL、RPUSHなどです。


第四のステップコマンドは、関連する機能の実装が完了した後に実行され、その後、サーバは、いくつかのフォローアップ作業を行いますし、コマンドは、クライアントに結果を返します。

コマンドの実行中に(1)時間がかかる場合があり、構造がredisCommand対応するコマンドに同期する必要があります。値redisCommand構造がインクリメントされるカウンタ呼び出している間、属性ミリ秒の値を変更します。

このサーバは、スロークエリログ機能を開始した場合(2)ので、スロークエリログモジュールはあなただけで完成し実行したコマンドのためのスロークエリログを追加する必要があるかどうかを判断します。

(3)このサーバは、AOFの永続性機能を有効にした場合、その後、AOF持続モジュールの要求がAOFライトバッファ、このコマンドの実行を完了します。

このサーバーから他のサーバーがある場合(4)は、現在のデータ同期バックアップ、このサーバはそれが接続を与えるためにサーバから転送要求を実行するコマンドです。

処理サーバ関連のフォローアップが完了した後で、クライアントのソケットが書き込み可能な状態となり、コマンドプロセッサ応答を呼び出します。リターン結果サーバプロセッサは、クライアントに送信されるクライアントプロトコル形式の出力バッファに格納されたコマンド応答を起動します

コマンドプロセッサが返す結果が正常にクライアントに送信された返信すると、それは、スペースを解放するには、次のコマンドの要求を出力バッファのクライアントの状態を削除します

ステップ5クライアントがサーバのOKによって返されたコマンドの結果を受け、その後、ユーザーに結果を表示します。

おすすめ

転載: www.cnblogs.com/undefined22/p/12591422.html