ホームページ  >  記事  >  データベース  >  なぜ Redis のシングルスレッドはこれほど高速に実行されるのでしょうか?

なぜ Redis のシングルスレッドはこれほど高速に実行されるのでしょうか?

尚
オリジナル
2019-07-04 11:44:0918339ブラウズ

なぜ Redis のシングルスレッドはこれほど高速に実行されるのでしょうか?

Redis が非常に高速に実行される理由は、主に次の理由によるものです。

(1) 純粋なメモリ操作、大量のデータベース アクセスを回避し、直接アクセスを減らすredis はディスクデータを読み込み、redis はメモリにデータを保存します データの読み書きの際、ハードディスクの I/O 速度に制限されないため高速です;

(2) シングルスレッド動作により無駄な処理を回避しますコンテキストの切り替えや競合状態がなく、マルチプロセスやマルチスレッドによる切り替えによる CPU の消費がありません。さまざまなロックの問題を考慮する必要がありません。ロック操作やロック解除操作がありません。デッドロックの可能性によるパフォーマンスの消費がない;

(3) ノンブロッキング I/O 多重化メカニズムが採用されている

多重化の原則:

なぜ Redis のシングルスレッドはこれほど高速に実行されるのでしょうか?

# #ユーザーはまず IO 操作を必要とするソケットを select に追加し、次にブロックして select システム コールが返されるのを待ちます。データが到着すると、ソケットがアクティブ化され、select 関数が戻ります。ユーザー スレッドは正式に読み取りリクエストを開始し、データを読み取り、実行を継続します。このようにして、ユーザーは複数のソケットを登録し、継続的に select を呼び出してアクティブ化されたソケットを読み取ることができます。redis サーバーはこれらのソケットをキューに配置し、ファイル イベント ディスパッチャーが順番にキューに移動し、それらを別のイベント処理に転送します。プロセッサーに組み込まれており、読み取り効率が向上します。

マルチチャネル I/O 多重化テクノロジを使用すると、単一のスレッドで複数の接続要求を効率的に処理できます (ネットワーク IO の時間消費を最小限に抑えます)。マルチチャネル I/O 多重化モデルでは、select、poll が使用されます。 epoll には、複数のストリームの I/O イベントを同時に監視する機能があります。アイドル状態のとき、現在のスレッドをブロックします。1 つ以上のストリームに I/O イベントがあると、ブロックされた状態から復帰します。 , したがって、プログラムはすべてのストリームがポーリングされ (epoll は実際にイベントを発行するストリームのみをポーリングします)、準備ができているストリームのみが順次処理されます。このアプローチにより、多数の無駄な操作が回避され、効率が向上します。

(4) 柔軟で多様なデータ構造。

Redis は、内部で redisObject オブジェクトを使用して、すべてのキーと値を表します。 redisObjectの主な情報には、データ型、エンコード方式、データポインタ、仮想メモリなどが含まれます。これには、文字列、ハッシュ、リスト、セット、ソート セットの 5 つのデータ型が含まれており、対応するデータ型はさまざまなシナリオに使用され、メモリ使用量が削減されるだけでなく、ネットワーク トラフィック送信も節約されます。

(5) 永続化

redis のデータはメモリ上に保存されるため、永続化が設定されていない場合、redis の再起動後にすべてのデータが失われるため、redis の永続化機能を有効にする必要があります。 、データをディスクに保存し、redis を再起動すると、ディスクからデータを復元できます。 Redis は永続化のために 2 つの方法を提供します。1 つは RDB 永続化 (原則として、メモリ内の Redis のデータベース レコードをディスク上の RDB 永続化に定期的にダンプすることです)、もう 1 つは AOF (ファイル追加のみ) 永続化 (原則は、 redis 操作ログをファイルに追加する方法)。永続性は Redis の速度には直接関係していないようですが、Redis データのセキュリティと信頼性を確保し、データのバックアップにも役割を果たします。

(6) まとめ

シングルスレッドではマルチコア CPU の性能を発揮できないかというと、実はそうではなく、複数の Redis インスタンスを開くことで改善できます。単一のマシン上で。 1 つのスレッドは 1 つの CPU コアのみを使用できるため、同じマルチコア サーバーで複数のインスタンスを起動して、マスター/マスターまたはマスター/スレーブを形成できます。時間のかかる読み取りコマンドはスレーブ上で完全に実行できるため、完全に実行できます。 redis ロールに。

シングル スレッドは、1 つのスレッドを使用するネットワーク リクエスト モジュールを指します (したがって、同時実行セキュリティを考慮する必要はありません)。他のモジュールも複数のスレッドを使用します。Redis を使用する場合は、その利点を最大限に活用し、いくつかのスレッドを避けてください。不適切な操作を行うと、パフォーマンスが低下する可能性があります。

Redis 関連の知識の詳細については、

Redis 使用法チュートリアル 列をご覧ください。

以上がなぜ Redis のシングルスレッドはこれほど高速に実行されるのでしょうか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。