Redis がマルチスレッドを導入するのはなぜですか?
1. 問題の概要
Redis 6.0以降のバージョンではシングルスレッドモデルの設計が廃止され、当初シングルスレッドで動作していたRedisも選択的にマルチスレッドを使用するようになりました。モデル 一見、Redis 著者はとても素晴らしいですが、「本当の香りの法則」からは逃れられません。
(2) Redis が 6.0 以降にマルチスレッドを追加したのはなぜですか (場合によっては、シングルスレッドには欠点があり、マルチスレッドで解決できる場合があります)。
実際のところ、著者は真の香りの定理から逃れていないわけではありませんが、時間が経つにつれて、ますます多くの問題が発生します。元のデザインは多少時代遅れになっているため、変更を加える必要があります。 。 OK、質問が 2 つあるので、注意深く分析してみましょう。
2. Redis はなぜ最初からシングルスレッドを使用したのですか?
シングルスレッドであろうとマルチスレッドであろうと、すべては Redis の開発効率を向上させるためです。ベースのデータベースであり、処理する必要があります。多数の外部ネットワーク要求には必然的に複数の IO が必要です。幸いなことに、Redis は多くの優れたメカニズムを使用して高い効率を確保しています。では、なぜ Redis はシングルスレッド モードで設計されているのでしょうか?それは次のように要約できます:
(1) IO 多重化
Redis のトップレベルの設計を見てみましょう。
FD はファイル記述子で、現在のファイルが読み取り可能、書き込み可能、または異常であるかどうかを意味します。 I/O 多重化メカニズムを使用して、複数のファイル記述子の読み取り可能および書き込み可能ステータスを同時に監視します。
マルチスレッドの特性を持っていると理解していただければと思います。ネットワーク リクエストが受信されると、メモリ内で迅速に処理されます。ほとんどの操作は純粋にメモリベースであるため、処理速度は非常に高速になります。 つまり、シングルスレッドモードでは、接続されたネットワーク処理が多くても、IO多重化により高速メモリ処理では無視できるということです。
(2) 高い保守性マルチスレッド モデルはパフォーマンスは良好ですが、プログラムの実行順序に不確実性が生じるため、同時読み取りと書き込みに関連する問題が発生します。 。シングルスレッド モードでは、デバッグとテストが簡単に行えます。
(3) メモリに基づくと、シングルスレッド状態でも効率は高いです。
マルチスレッドでは CPU リソースを最大限に活用できますが、Redis の場合はメモリベースの速度のため、これは非常に高く、1 秒で 100,000 のユーザー リクエストを処理できます。1 秒で 100,000 では不十分な場合は、Redis シャーディング テクノロジを使用して、それを別の Redis サーバーに配信できます。このクッキング方法により、同じ Redis サービス内に多数のマルチスレッド操作が導入されることが回避されます。
AOF バックアップが必要でない限り、この操作はメモリベースであるため、基本的に I/O 操作は必要ありません。これらのデータの読み取りと書き込みはメモリ内でのみ行われるため、処理速度は非常に高速です。すべての外部リクエストを処理するためにマルチスレッド モデルを使用することは、良い解決策ではない可能性があります。
基本的に 2 つの文に要約できることがわかりました。メモリに基づいており、多重化テクノロジを使用しています。シングルスレッドの速度は非常に速く、マルチスレッドの特性が保証されています。マルチスレッドを使用する必要がないためです。3. マルチスレッドを導入する理由は何ですか? シングルスレッドの利点については先ほど述べましたが、ここではなぜマルチスレッドを導入し、マルチスレッドの不快感を克服する必要があるのかについて話したいと思います。マルチスレッドの導入により、Redis のいくつかの側面ではシングルスレッドの利点が失われていることがわかります。
読み取り/書き込みシステムの呼び出しは、Redis の実行中にネットワークの読み取りと書き込みを要求するため、CPU 時間のほとんどを占めるため、ネットワークの読み取りと書き込みをマルチスレッドにすると、パフォーマンスが大幅に向上します。
Redis のマルチスレッドは、ネットワーク データの読み書きとプロトコル解析にのみ使用されますが、コマンドの実行は依然としてシングルスレッドです。この設計の理由は、マルチスレッドによって Redis が複雑になることを望まないことと、キー、LUA、トランザクション、LPUSH/LPOP などの同時実行性の問題を制御する必要があるためです。
Redis の最新バージョンでは、他のスレッドによって非同期に処理できるいくつかの削除操作が追加されました (前述の
UNLINKと
FLUSHALL ASYNC##)。 ##FLUSHDB ASYNC、なぜこれらの削除操作が必要なのでしょうか?また、マルチスレッドで非同期に処理する必要があるのはなぜですか? Redis では del コマンドを使用して要素を削除できることがわかっていますが、要素が非常に大きい場合 (数十メガバイトまたは数百メガバイトを占める可能性がある)、短時間では完了できません。 、マルチスレッド非同期サポートが必要です。
削除作業をバックグラウンドで実行できるようになりました。
以上がRedis がマルチスレッドを導入するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック

1. [スタート]メニューを起動し、[cmd]と入力し、[コマンドプロンプト]を右クリックし、[管理者として実行]を選択します。 2. 次のコマンドを順番に入力します (注意してコピーして貼り付けてください): SCconfigwuauservstart=auto、Enter キーを押す SCconfigbitsstart=auto、Enter キーを押す SCconfigcryptsvcstart=auto、Enter キーを押す SCconfigtrustedinstallerstart=auto、Enter キーを押す SCconfigwuauservtype=share、Enter キーを押す netstopwuauserv 、enter netstopcryptS を押す

GolangAPI のキャッシュ戦略により、パフォーマンスが向上し、サーバーの負荷が軽減されます。一般的に使用される戦略は、LRU、LFU、FIFO、TTL です。最適化手法には、適切なキャッシュ ストレージの選択、階層型キャッシュ、無効化管理、監視とチューニングが含まれます。実際には、データベースからユーザー情報を取得する API を最適化するために LRU キャッシュが使用されます。それ以外の場合は、データベースからデータを取得した後にキャッシュを更新できます。

PHP 開発では、キャッシュ メカニズムにより、頻繁にアクセスされるデータがメモリまたはディスクに一時的に保存され、データベース アクセスの数が削減され、パフォーマンスが向上します。キャッシュの種類には主にメモリ、ファイル、データベース キャッシュが含まれます。キャッシュは、組み込み関数またはサードパーティのライブラリ (cache_get() や Memcache など) を使用して PHP に実装できます。一般的な実用的なアプリケーションには、データベース クエリ結果をキャッシュしてクエリ パフォーマンスを最適化したり、ページ出力をキャッシュしてレンダリングを高速化したりすることが含まれます。キャッシュ メカニズムにより、Web サイトの応答速度が効果的に向上し、ユーザー エクスペリエンスが向上し、サーバーの負荷が軽減されます。

まず、システム言語を簡体字中国語表示に設定して再起動する必要があります。もちろん、以前に表示言語を簡体字中国語に変更したことがある場合は、この手順をスキップできます。次に、レジストリ regedit.exe の操作を開始し、左側のナビゲーション バーまたは上部のアドレス バーで HKEY_LOCAL_MACHINESYSTEMCurrentControlSetControlNlsLanguage に直接移動し、InstallLanguage キーの値と Default キーの値を 0804 に変更します (英語に変更する場合)。まずシステムの表示言語を en-us に設定し、システムを再起動してから、すべてを 0409 に変更します) この時点でシステムを再起動する必要があります。

Redis キャッシュを使用すると、PHP 配列ページングのパフォーマンスを大幅に最適化できます。これは、次の手順で実現できます。 Redis クライアントをインストールします。 Redisサーバーに接続します。キャッシュ データを作成し、データの各ページをキー「page:{page_number}」を持つ Redis ハッシュに保存します。キャッシュからデータを取得し、大規模な配列での高コストの操作を回避します。

1. まず、デスクトップ上の[このPC]アイコンをダブルクリックして開きます。 2. 次に、マウスの左ボタンをダブルクリックして [C ドライブ] に入ります。システム ファイルは通常、自動的に C ドライブに保存されます。 3. 次に、C ドライブで [windows] フォルダーを見つけ、ダブルクリックしてに入ります。 4. [windows]フォルダーに入ったら、[SoftwareDistribution]フォルダーを見つけます。 5. 入力後、win11 のダウンロード ファイルとアップデート ファイルがすべて含まれている [ダウンロード] フォルダーを見つけます。 6. これらのファイルを削除したい場合は、このフォルダー内で直接削除してください。

Redis は、高性能のキー/値キャッシュです。 PHPRedis 拡張機能は、Redis サーバーと対話するための API を提供します。 Redis に接続し、データを保存および取得するには、次の手順を使用します。 接続: Redis クラスを使用してサーバーに接続します。ストレージ: set メソッドを使用してキーと値のペアを設定します。取得: get メソッドを使用してキーの値を取得します。

さまざまな PHP バージョンで関数のパフォーマンスを最適化する方法には、分析ツールを使用して関数のボトルネックを特定すること、オペコード キャッシュを有効にするか外部キャッシュ システムを使用すること、型アノテーションを追加してパフォーマンスを向上させること、および PHP バージョンに応じて適切な文字列連結およびソート アルゴリズムを選択することなどが含まれます。
