著者は、正確にスケジュールされたタスクと遅延キュー処理機能を備えた、高同時実行シナリオ向けのシンプルで安定したスケーラブルな遅延メッセージ キュー フレームワークを個人的に開発しました。半年以上前にオープンソース化されて以来、10 社を超える中小企業に正確でタイムリーなスケジューリング ソリューションを提供することに成功し、実稼働環境でのテストにも耐えてきました。より多くの人々の利益のために、オープンソース フレームワークのアドレスが提供されるようになりました: https://github.com/sunshinelyz/mykit-delay 序文 標準の分散キャッシュとして、Redis は分散システムやマイクロサービス システムの開発で広く使用されています。しかし、Redis の仮想メモリについて知っている人はほとんどいません。ちょうど今、私の友人が面接に行ったときにこの質問を受けました。今日は、Redis の仮想メモリについてお話します。 Redisについて ほとんどの NoSQL データベースと同様に、Redis もキー/値データ ストレージ モデルに従います。ただし、場合によっては、Redis はデータクエリとデータ変更の効率を向上させるために、キー/値をメモリに保存します。ただし、この方法は最適ではありません。さらに最適化して、キー データのみをメモリ内に保持するようにすることで、データ取得の効率を確保し、値データはめったに使用されないときにディスクに保持することができます。 実際のアプリケーションでは、比較的よく使用されるキーは約 10% のみです。このようにして、Redis は、あまり使用されない残りのキーと値を仮想メモリを通じてディスクに永続化できます。これらの永続化されたキーまたは値を読み取る必要がある場合、Redis はそれらをメインメモリに読み込みます。 アプリケーションシナリオ ほとんどのデータベースの場合、理想的な操作モードはすべてのデータをメモリにロードし、後続のクエリ操作をメモリ データに基づいて完全に完了することです。しかし、現実には、そのようなシナリオは多くありません。ほとんどの場合、データの一部のみをメモリにロードできます。 Redis では、キーは一般的にスワップされないという非常に重要な概念があるため、データベースに多数のキーがあり、それぞれが小さな値にのみ関連付けられている場合、このシナリオは仮想メモリの使用にはあまり適していません。逆に、データベースに含まれるキーの数は少ないが、各キーに関連付けられた値が非常に大きい場合、このシナリオは仮想メモリの使用に非常に適しています。 実際のアプリケーションでは、仮想メモリを最大限に活用してシステムの動作効率を向上させるために、多数の小さな値を持つキーを少数の大きな値を持つキーにマージすることができます。最も重要な方法は、元のキー/値モデルをハッシュベースのモデルに変更して、元のキーの多くがハッシュ内の属性になるようにすることです。 Redis 仮想メモリの設定 (1)現在のRedisサーバーの起動時に仮想メモリ機能を有効にするために、設定ファイルに以下の設定項目を追加します。
(2)設定ファイルでRedisで使用可能な仮想メモリの最大バイト数を設定します。メモリ内のデータがこの値より大きい場合、一部のオブジェクトはディスクに永続化され、使用メモリがこの値未満になるまで、永続化されたオブジェクトによって占有されているメモリが解放されます。
Redis の交換ルールは、可能な限り「最も古い」データを考慮することです。つまり、最も長い間使用されていないデータが保持されます。 2 つのオブジェクトの年齢が同じ場合は、値の大きいデータが最初に保存されます。 Redis はキーをディスクに永続化しないことに注意してください。そのため、キーのデータだけで仮想メモリ全体がいっぱいになると、このデータ モデルは仮想メモリ メカニズムの使用や、キー データ全体を収容するために値を大きく設定するのに適していません。実際のアプリケーションでは、Redis 仮想メモリの使用を検討する場合、データが頻繁にディスクに保存されることを避けるために、Redis にできるだけ多くのメモリを割り当てる必要があります。 (3)設定ファイルでページ数と各ページが占めるバイト数を設定します。メモリからディスクにデータを転送するには、スワップ ファイルを使用する必要があります。これらのファイルはデータの永続性とは関係がないため、Redis は終了前にこれらをすべて削除します。スワップ ファイルへのアクセスは主にランダム アクセスであるため、スワップ ファイルをソリッド ステート ディスクに保存することをお勧めします。これにより、システムの動作効率が大幅に向上します。
上記の構成では、Redis は永続化する必要のあるファイルを vm-pages ページに分割し、各ページは vm-page-size バイトを占有します。 Redis で使用できる最終的なスワップ ファイル サイズは、vm-pages * vm-page-size になります。値は 1 つ以上のページに保存できますが、ページは複数の値を保持することはできないため、vm-page-size を設定するときは Redis のこの機能を十分に考慮する必要があります。 (4) Redis設定ファイルには非常に重要な設定パラメータがあります。
このパラメータは、スワップ ファイルで IO 操作を実行するときに Redis が使用するスレッドの最大数を示します。一般的に、この値はホスト上の CPU コアの数と同じにすることをお勧めします。値を 0 に設定すると、Redis はスワップ ファイルで IO を実行するときに同期的に実行します。 Redis 同期データ方式 Redis の場合、スワップ ファイルを同期方式で操作すると、クライアントがスワップ ファイル内のデータにアクセスしているときに、他のクライアントがスワップ ファイル内のデータにアクセスしようとすると、前の操作が完了するまでクライアントの要求は中断されます。このブロックの影響は、比較的低速またはビジーなディスクから大きなデータ値を読み取るときに特に顕著になります。 ただし、同期操作はまったく役に立たないわけではありません。実際、全体的な実行効率の観点から見ると、同期方式は非同期方式よりも優れています。結局のところ、同期メソッドは、スレッドの切り替え、スレッド間の同期、スレッドの起動などの操作によって生成される余分なオーバーヘッドを節約します。特に、最も頻繁に使用されるデータをメインメモリから直接読み取ることができる場合、同期アプローチの方がパフォーマンスが向上します。 最終的にどの構成方法を選択するかについては、実験と調整を続けるのが最善の方法です。 この記事はWeChatの公開アカウント「Glacier Technology」から転載したものです。下のQRコードからフォローできます。この記事を転載する場合は、Glacier Technology 公式アカウントまでご連絡ください。 |
<<: モノのインターネットにおけるフォグコンピューティングの応用
>>: 学術委員の呉和全氏: エッジ コンピューティングに関する「10 の新たな疑問」
百度は6月19日、今後10年間で人工知能、チップ、クラウドコンピューティング、データセンターなどの新...
大王データは現在、海外活動の大規模なプロモーションイベントを開催しています。香港、韓国、米国のデータ...
1. ウェブサイトのキーワードをホームページでランク付けしたいのですが、どうすればよいですか?チーム...
あらゆるインターネット製品の背後には、いくつかの隠れた製品チェーン、さらにはビジネスチェーンがあり、...
solarvps を購入しました。無駄のないプローブ: http://65.181.116.152:...
SEO が批判されているインターネットの一般的な環境では、ほとんどの人が多かれ少なかれ混乱しています...
「大根園」、もっと大きな「トマト園」?瑞創はマイクロソフトに3600万ドルの賠償金を支払い、検察に起...
馮英建Google は数か月ごとに「ダンス」(GoogleDance)をします。私たちはそれに慣れて...
ラスベガスのデータセンターでホストされているHostodoのKVMシリーズVPSが販売中です。従来の...
この評価 VPS の基本構成: オペレーティング システム: Debian 6.0 64 ビット、C...
123systems には賛否両論の評価があります。ホスト キャットは、一時的に逃げ出す可能性は非常...
ウェブサイトにはさまざまな種類があります。ウェブマスターとして、最も得意とする業界でビジネスを始める...
Baidu は、大規模な業界サイトを優先するように検索ランキングを調整しました。この動きは、中小規模...
最近は百度と360に関する記事が少なくなってきたかもしれませんが、両社の戦いは未だ続いています。広い...
序文近年、HTML5 技術の普及、モバイル デバイスの急速な成長、トラフィック料金の継続的な低下によ...