ホームページ  >  記事  >  データベース  >  Redis の高度な同時処理の概要

Redis の高度な同時処理の概要

尚
転載
2020-04-29 09:07:053262ブラウズ

Redis の高度な同時処理の概要

Redis の同時実行性と速度が高い理由

1.Redis はメモリと読み取りに基づいています。メモリの書き込み速度が非常に速い;

2.Redis はシングルスレッドなので、コンテキスト切り替えスレッドでの時間を大幅に節約できます;

3.Redis は多重化テクノロジを使用しており、同時接続を処理できます。ノンブロッキング IO の内部実装では、epoll 自体によって実装された単純なイベント フレームワークを使用して epoll を使用します。 epoll での読み取り、書き込み、クローズ、接続はすべてイベントに変換され、epoll の多重化機能を使用して io に時間を無駄にすることはありません。

以下では、シングルスレッド設計と IO 多重化コア設計が高速である理由に焦点を当てます

#Redis がシングルスレッドである理由

1.公式回答

Redis はメモリベースの操作であるため、CPU が Redis のボトルネックになることはありません。Redis のボトルネックは、おそらくマシンのメモリ サイズまたはネットワーク帯域幅です。シングルスレッドは実装が簡単で、CPU がボトルネックにならないため、シングルスレッド ソリューションを採用するのは合理的です。

2. パフォーマンス指標

Redis のパフォーマンスについては、公式サイトにも記載されていますが、通常のノートブックであれば、1 秒あたり数十万のリクエストを簡単に処理できます。

3. 詳細な理由

1) さまざまなロックによるパフォーマンスの消費が不要です

Redis のデータ構造は単純な Key-Value だけではなく、リストとハッシュ このような複雑な構造では、長いリストの末尾への要素の追加、ハッシュへのオブジェクトの追加または削除など、非常に細かい操作を実行できます。これらの操作では大量のロックの追加が必要になる場合があり、その結果、同期オーバーヘッドが大幅に増加します。

つまり、シングル スレッドの場合は、さまざまなロックの問題を考慮する必要がなく、ロック操作やロック解除操作がなく、デッドロックの可能性によるパフォーマンスの消費もありません。

2) シングルスレッド マルチプロセス クラスター ソリューション

シングルスレッドの能力は実際に非常に強力であり、各コアの効率も非常に高くなります。シングル スレッドよりも高いパフォーマンス制限がありますが、今日のコンピューティング環境では、単一マシンのマルチスレッドの上限でもニーズを満たすことができないことがよくあります。さらに検討する必要があるのは、マルチサーバー クラスタリング ソリューションです。スレッド技術はまだ利用できません。

したがって、シングルスレッド、マルチプロセス クラスターは流行のソリューションです。

3) CPU 消費量

単一スレッドを使用して不要なコンテキストの切り替えや競合状態を回避し、マルチプロセスまたはマルチスレッドによる切り替えによる CPU 消費はありません。

しかし、CPU が Redis のボトルネックになった場合、またはサーバーの他の CPU コアをアイドル状態にしたくない場合はどうすればよいでしょうか?

さらにいくつかの Redis プロセスを開始することを検討できます。Redis はリレーショナル データベースではなくキーと値のデータベースであり、データ間に制約はありません。どのキーがどの Redis プロセスに配置されているかをクライアントが区別できれば問題ありません。

IO 多重化テクノロジー

Redis は、ネットワーク IO 多重化テクノロジーを使用して、複数の接続がある場合にシステムの高スループットを確保します。

マルチチャネル - 複数のソケット接続を指し、多重化 - 1 つのスレッドを再利用することを指します。主な多重化テクノロジには、select、poll、epoll の 3 つがあります。 epoll は、利用可能な最新かつ最高の多重化テクノロジです。

ここで、「複数」は複数のネットワーク接続を指し、「再利用」は同じスレッドを再利用することを指します。マルチチャネル I/O 多重化テクノロジの使用により、単一のスレッドで複数の接続リクエストを効率的に処理でき (ネットワーク IO の時間消費を最小限に抑えます)、Redis はメモリ内のデータを非常に高速に処理します (ここではメモリ内操作は問題になりません) ).パフォーマンスのボトルネック)、主に上記 2 点が Redis の高スループットに貢献します。

Redis の高度な同時処理の概要

Redis の高同時実行性の概要

1. Redis は純粋なメモリ データベースであり、一般に単純です。アクセス操作、スレッドに多くの時間がかかり、費やされる時間は主に IO に集中するため、読み取り速度が速くなります。

2. IO についてもう一度話しましょう。Redis はノンブロッキング IO と IO 多重化を使用します。単一のスレッドを使用して記述子をポーリングし、データベースのオープン、クローズ、読み取り、書き込みをイベントに変換します。スレッド切り替え時のコンテキスト切り替えと競合を軽減します。

3. Redis はシングルスレッド モデルを採用しており、これにより各操作のアトミック性が保証され、スレッド コンテキストの切り替えと競合が軽減されます。

4. さらに、データ構造も非常に役立ちます。Redis はプロセス全体でハッシュ構造を使用するため、読み取り速度が速くなります。また、圧縮テーブルなど、データ ストレージを最適化する特別なデータ構造もいくつかあります。短いデータは圧縮されて保存されます。別の例としてはスキップ テーブルがあり、読み取りを高速化するために順序付けされたデータ構造が使用されます。

5. もう 1 つのポイントは、Redis が独自のイベント セパレータを使用することであり、これは比較的効率的であり、内部的にはノンブロッキング実行メソッドを使用し、比較的大きなスループット容量を備えています。

redis の詳細については、

redis 入門チュートリアル 列に注目してください。

以上がRedis の高度な同時処理の概要の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はcnblogs.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。