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 サイトの他の関連記事を参照してください。