著者は、正確にスケジュールされたタスクと遅延キュー処理機能を備えた、高同時実行シナリオ向けのシンプルで安定したスケーラブルな遅延メッセージ キュー フレームワークを個人的に開発しました。半年以上前にオープンソース化されて以来、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 の新たな疑問」
今日は役に立つ情報がないのでどうやって更新するか悩んでいたので、Cyyzaid の VPS (rfc...
1969 年、米国国防総省は今日のインターネットの原型である ARPANET を初めて作成しました。...
最近では、スマートフォンやタブレット コンピューターなどのモバイル ハンドヘルド デバイスの普及によ...
クラウド コンピューティング サービスへの支出を管理することは、これまで以上に重要になっています。ク...
itldc は創業から約 20 年になりますが、毎年恒例のブラックフライデー プロモーションが始まり...
近年、政府の推進と市場の需要という二重の影響により、わが国ではクラウド コンピューティング業界の発展...
「グリーン クラウド コンピューティング」は、コンピューティングやその他の IT リソースの持続可能...
今日のテクノロジー主導の世界では、企業が収益を増やすために人工知能を活用することが必要不可欠になって...
[[382875]]現在、エッジ コンピューティングを活用している企業は 4 分の 1 にすぎません...
文:李浩宇年末、電子商取引は注目を集めながら、またもや急速な発展を遂げた一年となりました。 2012...
Hosthatchは英国ロンドンで独自のVPSクラウドサーバー事業を展開しており、安価で費用対効果が...
ウェブサイトの SEO は、細部にわたる最適化のプロセスです。SEO の最適化を実行すると、どんな小...
• クラウド収益は34%と24%(固定為替レート)増加し、最大の収益源となった。 • 現在のクラウド...
[[230190]] 2016年から2018年にかけて、現在は終了しているSaaSカスタマーサービス...
アマゾン ウェブ サービス (AWS) は 1 月 28 日、AWS Graviton2 プロセッサ...