前書き:
redis サーバーはイベント駆動型プログラムであり、ファイル イベントと時間イベントという 2 種類のイベントを処理する必要があることがわかっています。
それでは、redis イベント処理プロセスはどのようなものでしょうか?以下の図を見てみましょう:
aeMain 関数は、aeProcessEvents 関数を呼び出すことによって、ファイル イベントと時間イベントをスケジュールおよび実行します。イベント関連の情報は aeEventLoop に記録されます。まず、aeSearchNearestTimer 関数を通じて最短時間イベントの実行時間間隔 n を取得し、次に aeApiPoll 関数を呼び出して監視対象ソケットを取得し、最後にソケットに対応するイベント処理関数 rfileProc および wfileProc を実行し、最後に時間イベントを実行します。 function processTimeEvents
File Event
Redis は、Reactor モデルに基づいて独自のネットワーク イベント プロセッサを開発しました。このプロセッサは、ファイル イベント ハンドラーと呼ばれます:
ファイル イベント プロセッサは、IO マルチプレクサを使用して複数のソケットをリッスンし、ソケットによって現在実行されているタスクに従って、さまざまなイベント プロセッサをソケットに関連付けます。
監視対象のソケットの準備ができたとき接続応答 (受け入れ)、読み取り (読み取り)、書き込み (書き込み)、閉じる (クローズ) などの操作を実行します。ファイル イベントが発生すると、これらのファイル イベント プロセッサは、ソケットに以前に関連付けられていたイベント ハンドラーを呼び出して、イベントを処理する
redis ビデオ チュートリアル)
ファイル イベントのハンドラーRedis はファイル イベント用に複数のハンドラーを作成しました:#Time イベント
id: 時刻と時刻に対してサーバーによって作成されるグローバルに一意の ID: 時刻と時刻の到着時刻が記録されます (ミリ秒精度の UNIX タイムスタンプ) timeProc:タイム イベント プロセッサ
サーバーのすべてのタイム イベントは、順序付けされていないリンク リストに配置されます。タイム イベント エグゼキュータが実行されるたびに、リンク リスト全体を走査し、到着するすべてのタイム イベントを検索し、対応するイベント ハンドラを呼び出します。通常モードの Redis サーバーは 1 回のイベント (serverCron) のみを使用します。ベンチマーク モードでは、サーバーは 2 回のイベントのみを使用するため、イベント実行のパフォーマンスは影響を受けません。
関連する推奨事項: redis データベース チュートリアル
以上がRedisイベント処理プロセスの分析の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。