ホームページ  >  記事  >  データベース  >  Redis はなぜこんなに速いのか

Redis はなぜこんなに速いのか

silencement
silencementオリジナル
2019-06-06 09:26:432026ブラウズ

Redis はなぜこんなに速いのか

Redis は、単一プロセス、単一スレッド モデルを使用し、C 言語で記述されたメモリベースの KV データベースを使用します。提供されている公式データでは、100,000 qps に達する可能性があります。このデータは、単一プロセスとマルチスレッドを使用する同じメモリベースの KV データベースである Memcached よりも劣りません。

Redis が速い主な理由は次のとおりです:

1. 完全にメモリに基づいています

2. データ構造が単純で、データ操作が簡単です。もシンプルです

3. マルチチャネル I/O 多重化モデルを使用します

1 番目と 2 番目の点については詳しく説明しませんが、主にマルチチャネルを使用する 3 番目の点に焦点を当てます。チャネル I/O 多重化テクノロジー。

マルチチャネル I/O 多重化モデルは、select、poll、および epoll を使用して、複数のストリームの I/O イベントを同時に監視します。アイドル状態の場合、現在のスレッドはブロックされます。 a 複数のストリームに I/O イベントがある場合、それらはブロック状態からウェイクアップするため、プログラムはすべてのストリームをポーリングし (epoll は実際にイベントを発行したストリームのみをポーリングします)、それらを順番に処理するだけです。このアプローチにより、多くの無駄な操作が回避されます。ここで、「複数」は複数のネットワーク接続を指し、「再利用」は同じスレッドを再利用することを指します。マルチチャネル I/O 多重化テクノロジの使用により、単一のスレッドで複数の接続リクエストを効率的に処理でき (ネットワーク IO の時間消費を最小限に抑えます)、Redis はメモリ内のデータを非常に高速に処理します (ここではメモリ内操作は問題になりません) ).パフォーマンスのボトルネック)、主に上記 2 点が Redis の高スループットに貢献します。

Memcached とは異なり、Redis は Libevent を直接使用しませんが、select、epoll、evport、kqueue などの一般的なインターフェイスの非常に軽量な実装を完了します。さまざまなシステム コールに適切なインターフェイスを選択します。Linux のデフォルトは epoll です。 Libevent は比較的重くて汎用的なため、コード量が非常に多く、Redis では使用できない機能も多くありますが、「軽さ」を追求し、依存関係を排除するために、Redis はそれ自体をカプセル化することを選択しました。

単一プロセスと単一スレッドの利点

1. コードがより明確になり、処理ロジックがより単純になります。

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

3. マルチプロセスやマルチスレッドによる切り替えによるCPUの消費はありません。

以上がRedis はなぜこんなに速いのかの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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