ホームページ  >  記事  >  データベース  >  Redis はマルチスレッドですか?

Redis はマルチスレッドですか?

尚
オリジナル
2019-06-28 17:27:223417ブラウズ

Redis はマルチスレッドですか?

Redis はシングルスレッドです。シングルスレッドとは、ネットワーク要求モジュールが 1 つのスレッドを使用することを意味します (したがって、同時実行セキュリティを考慮する必要はありません)。つまり、1 つのスレッドがすべてのネットワーク要求を処理し、他のモジュールは引き続き複数のスレッドを使用します。

redis が高速に実行できる理由:

(1) ほとんどのリクエストは純粋なメモリ操作 (非常に高速)
(2) 単一スレッドを使用して不要な要素を排除するコンテキストスイッチングと競合状態
(3) ノンブロッキングIO-IO多重化(IO多重化とは何ですか?)

IO多重化にはselect、poll、epollの3つの方法があります。 select と poll はスレッド セーフではありませんが、epoll はスレッド セーフであることに注意してください。 epoll での読み取り、書き込み、クローズ、接続はすべてイベントに変換され、epoll の多重化機能を使用して io で時間を無駄にすることはありません。これら 3 つの条件、特に最初の条件は、リクエストの場合、互いに独立していません。いずれも時間がかかり、単一スレッドを使用した場合のスループットとパフォーマンスは想像に難くありません。 Redis は特殊なシナリオに適した技術的ソリューションを選択したと言うべきです。

redis の内部実装:

内部実装では epoll を使用し、epoll 自体によって実装された単純なイベント フレームワークを使用します。 epoll での読み取り、書き込み、クローズ、接続はすべてイベントに変換され、epoll の多重化機能を使用して io で時間を無駄にすることはありません。これら 3 つの条件、特に最初の条件は、リクエストの場合、互いに独立していません。いずれも時間がかかり、単一スレッドを使用した場合のスループットとパフォーマンスは想像に難くありません。 Redis は特殊なシナリオに適した技術的ソリューションを選択したと言うべきです。

スレッド セーフティの問題に関する Redis:

Redis は実際にスレッド クロージャの概念を採用しており、タスクを 1 つのスレッドで閉じるため、スレッド セーフティの問題は当然回避されますが、複数の Redis に依存する必要がある人向けです。複合操作の場合もロックが必要であり、分散ロックである可能性があります。

Redis を使用する利点は何ですか?

(1) HashMap と同様にデータがメモリに保存されるため高速です。HashMap の利点は、検索と操作の時間が O(1)

(2) であることです。 ) 豊富なサポート データ型、文字列、リスト、セット、ソート セット、ハッシュをサポート

#(3) トランザクションをサポート、操作はすべてアトミックです。いわゆるアトミックとは、データに対するすべての変更が実行されるか、または実行されることを意味します。まったく実行されません

(4) 豊富な機能: キャッシュ、メッセージング、キーによる有効期限の設定に使用でき、有効期限が切れると自動的に削除されます

Redis の一般的なパフォーマンスの問題と解決策:

(1) マスターは、R​​DB メモリ スナップショットや AOF ログ ファイルなどの永続化作業を実行しないことをお勧めします (マスターはメモリ スナップショットを書き込み、save コマンドは rdbSave 関数をスケジュールします。これにより、rdbSave 関数の作業がブロックされます)。スナップショットが比較的大きい場合、パフォーマンスへの影響は次のとおりです: データが非常に大きい場合、サービスが断続的に中断されるため、マスターにメモリ スナップショットを書き込まないことをお勧めします。AOF ファイルが大きすぎる場合は、大きい場合、マスター再起動の回復速度に影響します)

#(2) データが重要な場合は、特定のスレーブで AOF バックアップ データを有効にする必要があります。ポリシーは 1 秒に 1 回同期するように設定されています

(3) マスターとスレーブのレプリケーションの速度と接続の安定性を考慮すると、マスターとスレーブが同じ LAN 内にあることが最善です

(4) スレーブ ライブラリを LAN に追加しないようにしてください。大きなプレッシャーにさらされているマスター ライブラリ

(5) マスター/スレーブ レプリケーションにはグラフ構造を使用しないでください。一方向のリンク リスト構造、つまりマスター <- スレーブ 1 を使用する方が安定しています。 <- Slave2 <- Slave3...; この構造により、単一障害点の問題の解決とスレーブによるマスターの置き換えの実現が容易になります。マスターがハングアップした場合は、他のすべてを変更せずに、すぐに Slave1 をマスターとして有効にすることができます。

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

Redis 使用法チュートリアル

列をご覧ください。

以上がRedis はマルチスレッドですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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