Redis は純粋なメモリ データベースであり、一般に単純なアクセス操作です。スレッドには多くの時間がかかり、費やされる時間は主に IO に集中します。読み込み速度は速いです。 (推奨される学習: Redis ビデオ チュートリアル )
IO についてもう一度話しましょう。Redis はノンブロッキング IO、IO 多重化を使用し、単一のスレッドを使用して記述子をポーリングします。データベースのオープン、クローズ、イベントへの読み取りと書き込みが行われ、スレッド切り替え時のコンテキスト切り替えと競合が軽減されます。
Redis は、各操作のアトミック性を確保し、スレッド コンテキストの切り替えと競合を減らすためにシングル スレッド モデルを採用しています。
さらに、データ構造も非常に役立ちます。Redis はプロセス全体でハッシュ構造を使用するため、読み取り速度が速くなります。また、圧縮テーブルなど、データ ストレージを最適化する特別なデータ構造もいくつかあります。 、短いデータを圧縮して保存します。別の例としてはジャンプ テーブルがあり、順序付けされたデータ構造を使用して読み取りを高速化します。
もう 1 つのポイントは、Redis が独自のイベント セパレータを使用することです。これは比較的効率的で、内部的にはノンブロッキングの実行メソッドを使用し、比較的大きなスループット容量を備えています。
完全にメモリに基づいているため、ほとんどのリクエストは純粋なメモリ操作であり、非常に高速です。
データは、HashMap と同様にメモリに保存されます。HashMap の利点は、検索と操作の時間計算量が O(1) であることです。
データ構造がシンプルでデータ操作もシンプル Redis のデータ構造は特別に設計されており、
は不要なコンテキスト切り替えや競合状態を回避するためにシングルスレッドを採用しており、切り替えによる消費は発生しませんマルチプロセスまたはマルチスレッドによる CPU、さまざまなロックの問題を考慮する必要がなく、ロック操作やロック操作の解放がなく、デッドロックの可能性によるパフォーマンスの消費もありません。マルチチャネル I/O 多重化モデル、ノンブロッキング IO を使用します;
使用される基礎となるモデル、基礎となる実装方法、およびクライアントと通信するためのアプリケーション プロトコルが異なります。一般的なシステム コールにより、独自の VM メカニズムが構築されます。システム機能の場合、移動とリクエストに一定の時間が浪費されます。
上記の点は比較的理解しやすいです。以下では、マルチ-チャネル I/O 再利用モデル:(1) マルチチャネル I/O 多重化モデル
マルチチャネル I/O 多重化モデルは、select、poll を使用します。 、および epoll を使用して、同時に複数のストリームの I/O イベントを監視します。機能がアイドル状態の場合、現在のスレッドをブロックします。1 つ以上のストリームに I/O イベントがある場合、ブロックされた状態から復帰します。プログラムはすべてのストリームをポーリングし (epoll は実際にイベントを発行したストリームのみをポーリングし、クエリを実行します)、準備ができたストリームのみを順番に処理します。このアプローチにより、多数の無駄な操作が回避されます。
ここで、「複数」は複数のネットワーク接続を指し、「再利用」は同じスレッドを再利用することを指します。マルチチャネル I/O 多重化テクノロジの使用により、単一のスレッドで複数の接続リクエストを効率的に処理でき (ネットワーク IO の時間消費を最小限に抑えます)、Redis はメモリ内のデータを非常に高速に処理します。つまり、メモリ内の操作は行われません。 Redis のパフォーマンスに影響を与えるボトルネックになる主に、上記の点が Redis の高スループットに寄与しています。 Redis 関連の技術記事の詳細については、「Redis データベース チュートリアルの使用方法の概要」
列にアクセスして学習してください。以上がRedis はなぜそんなに速いのでしょうか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。