Redisイベント処理プロセスの分析

王林
リリース: 2021-02-19 09:18:21
転載
1840 人が閲覧しました

Redisイベント処理プロセスの分析

前書き:

redis サーバーはイベント駆動型プログラムであり、ファイル イベントと時間イベントという 2 種類のイベントを処理する必要があることがわかっています。

それでは、redis イベント処理プロセスはどのようなものでしょうか?以下の図を見てみましょう:

Redisイベント処理プロセスの分析

aeMain 関数は、aeProcessEvents 関数を呼び出すことによって、ファイル イベントと時間イベントをスケジュールおよび実行します。イベント関連の情報は aeEventLoop に記録されます。まず、aeSearchNearestTimer 関数を通じて最短時間イベントの実行時間間隔 n を取得し、次に aeApiPoll 関数を呼び出して監視対象ソケットを取得し、最後にソケットに対応するイベント処理関数 rfileProc および wfileProc を実行し、最後に時間イベントを実行します。 function processTimeEvents

File Event

Redis は、Reactor モデルに基づいて独自のネットワーク イベント プロセッサを開発しました。このプロセッサは、ファイル イベント ハンドラーと呼ばれます:

  • ファイル イベント プロセッサは、IO マルチプレクサを使用して複数のソケットをリッスンし、ソケットによって現在実行されているタスクに従って、さまざまなイベント プロセッサをソケットに関連付けます。

  • 監視対象のソケットの準備ができたとき接続応答 (受け入れ)、読み取り (読み取り)、書き込み (書き込み)、閉じる (クローズ) などの操作を実行します。ファイル イベントが発生すると、これらのファイル イベント プロセッサは、ソケットに以前に関連付けられていたイベント ハンドラーを呼び出して、イベントを処理する

#ファイル イベント ハンドラーの構成

(学習ビデオ共有:

redis ビデオ チュートリアル)

Redisイベント処理プロセスの分析

ファイル イベントのハンドラー

Redis はファイル イベント用に複数のハンドラーを作成しました:

  • 接続応答プロセッサ: Redis サーバーが初期化されると、プログラムは、この接続応答プロセッサをサービス リスニング スイートの AE_READABLE イベントに関連付けます。クライアントが connect 関数を使用してサーバー リスニング ソケットに接続すると、ソケットは AE_READABLE イベントを生成し、接続応答プロセッサの実行をトリガーします。対応するソケット応答操作を実行します。

  • コマンド リクエスト プロセッサ: クライアントが接続するとき 応答プロセッサがサーバーに正常に接続した後、サーバーはクライアント ソケットの AE_READABLE イベントをコマンド リクエスト プロセッサ。クライアントがコマンド リクエストをサーバーに送信すると、ソケットは AE_READABLE イベントを生成し、コマンド リクエストをトリガーします。プロセッサは、対応するソケット読み取り操作を実行します。

  • コマンド応答プロセッサ: サーバーにクライアントに渡す必要のあるコマンド応答がある場合、サーバーはクライアントをソケットに接続します。インターフェイスの AE_WRITABLE イベントは、コマンド応答プロセッサに関連付けられます。クライアントがコマンド応答を受信する準備ができたとき、サーバーから送信されると、AE_WRITABLE イベントが生成され、コマンド応答プロセッサーの実行がトリガーされ、対応するソケット書き込み操作が実行されます。

    ##サーバーはパッケージ ワードの AE_READABLE イベントをリッスンし、クライアントが接続要求イベントを送信すると AE_READABLE を生成します。サーバーはクライアントの接続要求に応答し、クライアント ソケットの AE_READABLE イベントを関連付けます。コマンド リクエスト プロセッサを使用すると、クライアントはサーバーにコマンド リクエストを送信できます

クライアントはサーバーにコマンド リクエストを送信します。クライアント ソケットは AE_READABLE イベントを生成し、実行するコマンド プロセッサです。コマンドを実行すると、対応するコマンド応答が生成されます。サーバーは、クライアント ソケットの AE_WRITABLE イベントとコマンドを組み合わせます。応答プロセッサ アソシエーション
  • クライアントが実行しようとしたときコマンド応答を読み取ると、クライアント ソケットは AE_WRITABLE イベントを生成し、コマンド応答プロセッサの実行をトリガーします。コマンド応答プロセッサがコマンドに応答すると、すべてがソケットに書き込まれた後、サーバーは AE_WRITABLE イベント間の関連付けに接続します。クライアント ソケットとコマンド応答ハンドラーの
  • #Time イベント

  • Redis 時間イベントは、時間指定イベントと定期イベントに分類されます。時間イベントは 3 つの属性で構成されます。
  • id: 時刻と時刻に対してサーバーによって作成されるグローバルに一意の ID: 時刻と時刻の到着時刻が記録されます (ミリ秒精度の UNIX タイムスタンプ) timeProc:タイム イベント プロセッサ

サーバーのすべてのタイム イベントは、順序付けされていないリンク リストに配置されます。タイム イベント エグゼキュータが実行されるたびに、リンク リスト全体を走査し、到着するすべてのタイム イベントを検索し、対応するイベント ハンドラを呼び出します。通常モードの Redis サーバーは 1 回のイベント (serverCron) のみを使用します。ベンチマーク モードでは、サーバーは 2 回のイベントのみを使用するため、イベント実行のパフォーマンスは影響を受けません。

関連する推奨事項: redis データベース チュートリアル

以上がRedisイベント処理プロセスの分析の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:cnblogs.com
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート