04-redisクライアント

1813 ワード

  • サーバ状態構造クライアントチェーンテーブルを使用する複数のクライアント状態が接続され、新たに追加するクライアント状態はチェーンテーブルの末尾
  • に配置される.
    struct redisServer {
        ...;
        list *clients; //     ,          
        ...;
    };
    

    クライアントのプロパティ
    typedef struct redisCLient {
        ...;
        int     fd;     //               ,     fd=-1
        robj    *name;  //      ,               ,  CLIENT setname    
        int     flags;  //                     
        sds     querybuf;   //         ,          
        robj    **argv; //          ,          
        int     argc;   //   argv    
        struct redisCommand *cmd;   //        
        char    buf[REDIS_REPLY_CHUNK_BYTES];   //           
        int     bufpos;     //   buf      
        list    *reply;     //          
        int     authenticated;  //     ,0       ,1    
        time_t  ctime;          //           
        time_t  lastinterracation;  //                   
        time_t  obuf_soft_limit_reached_time;   //                   
        ...;
    } redisClient;
    
  • クライアント状態flagsプロパティは、クライアントの角およびクライアントが現在位置する状態を表すために異なるフラグを使用する.
  • 入力バッファは、クライアントから送信されたコマンド要求を記録し、このバッファサイズは1 GBを超えてはならない.
  • コマンドのパラメータとパラメータの個数はクライアント状態argvとargcプロパティに記録され、cmdプロパティはクライアントがコマンドを実行する実装関数を記録する.
  • クライアントには、固定サイズバッファと可変サイズバッファの2種類があり、固定サイズバッファは最大16 KBであり、可変サイズバッファの最大サイズはサーバ設定のハード制限を超えてはならない.
  • 出力バッファ制限値には2種類あり、出力バッファのサイズがサーバが設定したハード制限を超えると、クライアントはすぐに閉じられます.それ以外に、クライアントが一定時間内にサーバ設定のソフトリミットを超えている場合、クライアントも閉じられます.
  • クライアントがネットワークを介してサーバに接続されると、サーバはそのクライアントに対応するクライアント状態を作成します.ネットワーク接続がオフになり、不適合プロトコル形式のコマンド要求が送信され、CLIENT KILLコマンドのターゲットとなり、アイドルイベントがタイムアウトし、出力バッファのサイズが制限を超えたため、クライアントがオフになる.
  • luaスクリプトを処理する擬似クライアントは、サーバの初期化時に作成され、このクライアントは常に存在し、サーバが閉じていることを知っています.
  • AOFファイルの読み込み時に擬似クライアントを使用して読み込み作業開始時に動的に作成し、読み込み作業終了後に閉じる.

  • 参考:黄鍵宏先生の『redis設計と実現』、機械工業出版社