インタビュアー:Redis の仮想メモリについて教えてください。

インタビュアー:Redis の仮想メモリについて教えてください。

[[350704]]

著者は、正確にスケジュールされたタスクと遅延キュー処理機能を備えた、高同時実行シナリオ向けのシンプルで安定したスケーラブルな遅延メッセージ キュー フレームワークを個人的に開発しました。半年以上前にオープンソース化されて以来、10 社を超える中小企業に正確でタイムリーなスケジューリング ソリューションを提供することに成功し、実稼働環境でのテストにも耐えてきました。より多くの人々の利益のために、オープンソース フレームワークのアドレスが提供されるようになりました: https://github.com/sunshinelyz/mykit-delay

序文

標準の分散キャッシュとして、Redis は分散システムやマイクロサービス システムの開発で広く使用されています。しかし、Redis の仮想メモリについて知っている人はほとんどいません。ちょうど今、私の友人が面接に行ったときにこの質問を受けました。今日は、Redis の仮想メモリについてお話します。

Redisについて

ほとんどの NoSQL データベースと同様に、Redis もキー/値データ ストレージ モデルに従います。ただし、場合によっては、Redis はデータクエリとデータ変更の効率を向上させるために、キー/値をメモリに保存します。ただし、この方法は最適ではありません。さらに最適化して、キー データのみをメモリ内に保持するようにすることで、データ取得の効率を確保し、値データはめったに使用されないときにディスクに保持することができます。

実際のアプリケーションでは、比較的よく使用されるキーは約 10% のみです。このようにして、Redis は、あまり使用されない残りのキーと値を仮想メモリを通じてディスクに永続化できます。これらの永続化されたキーまたは値を読み取る必要がある場合、Redis はそれらをメインメモリに読み込みます。

アプリケーションシナリオ

ほとんどのデータベースの場合、理想的な操作モードはすべてのデータをメモリにロードし、後続のクエリ操作をメモリ データに基づいて完全に完了することです。しかし、現実には、そのようなシナリオは多くありません。ほとんどの場合、データの一部のみをメモリにロードできます。

Redis では、キーは一般的にスワップされないという非常に重要な概念があるため、データベースに多数のキーがあり、それぞれが小さな値にのみ関連付けられている場合、このシナリオは仮想メモリの使用にはあまり適していません。逆に、データベースに含まれるキーの数は少ないが、各キーに関連付けられた値が非常に大きい場合、このシナリオは仮想メモリの使用に非常に適しています。

実際のアプリケーションでは、仮想メモリを最大限に活用してシステムの動作効率を向上させるために、多数の小さな値を持つキーを少数の大きな値を持つキーにマージすることができます。最も重要な方法は、元のキー/値モデルをハッシュベースのモデルに変更して、元のキーの多くがハッシュ内の属性になるようにすることです。

Redis 仮想メモリの設定

(1)現在のRedisサーバーの起動時に仮想メモリ機能を有効にするために、設定ファイルに以下の設定項目を追加します。

  1. VM 有効 はい

(2)設定ファイルでRedisで使用可能な仮想メモリの最大バイト数を設定します。メモリ内のデータがこの値より大きい場合、一部のオブジェクトはディスクに永続化され、使用メモリがこの値未満になるまで、永続化されたオブジェクトによって占有されているメモリが解放されます。

  1. vm-最大メモリ (バイト)

Redis の交換ルールは、可能な限り「最も古い」データを考慮することです。つまり、最も長い間使用されていないデータが保持されます。 2 つのオブジェクトの年齢が同じ場合は、値の大きいデータが最初に保存されます。 Redis はキーをディスクに永続化しないことに注意してください。そのため、キーのデータだけで仮想メモリ全体がいっぱいになると、このデータ モデルは仮想メモリ メカニズムの使用や、キー データ全体を収容するために値を大きく設定するのに適していません。実際のアプリケーションでは、Redis 仮想メモリの使用を検討する場合、データが頻繁にディスクに保存されることを避けるために、Redis にできるだけ多くのメモリを割り当てる必要があります。

(3)設定ファイルでページ数と各ページが占めるバイト数を設定します。メモリからディスクにデータを転送するには、スワップ ファイルを使用する必要があります。これらのファイルはデータの永続性とは関係がないため、Redis は終了前にこれらをすべて削除します。スワップ ファイルへのアクセスは主にランダム アクセスであるため、スワップ ファイルをソリッド ステート ディスクに保存することをお勧めします。これにより、システムの動作効率が大幅に向上します。

  1. vmページ 134217728
  2. vmページサイズ32

上記の構成では、Redis は永続化する必要のあるファイルを vm-pages ページに分割し、各ページは vm-page-size バイトを占有します。 Redis で使用できる最終的なスワップ ファイル サイズは、vm-pages * vm-page-size になります。値は 1 つ以上のページに保存できますが、ページは複数の値を保持することはできないため、vm-page-size を設定するときは Redis のこの機能を十分に考慮する必要があります。

(4) Redis設定ファイルには非常に重要な設定パラメータがあります。

  1. vm-最大スレッド数 4

このパラメータは、スワップ ファイルで IO 操作を実行するときに Redis が使用するスレッドの最大数を示します。一般的に、この値はホスト上の CPU コアの数と同じにすることをお勧めします。値を 0 に設定すると、Redis はスワップ ファイルで IO を実行するときに同期的に実行します。

Redis 同期データ方式 Redis の場合、スワップ ファイルを同期方式で操作すると、クライアントがスワップ ファイル内のデータにアクセスしているときに、他のクライアントがスワップ ファイル内のデータにアクセスしようとすると、前の操作が完了するまでクライアントの要求は中断されます。このブロックの影響は、比較的低速またはビジーなディスクから大きなデータ値を読み取るときに特に顕著になります。

ただし、同期操作はまったく役に立たないわけではありません。実際、全体的な実行効率の観点から見ると、同期方式は非同期方式よりも優れています。結局のところ、同期メソッドは、スレッドの切り替え、スレッド間の同期、スレッドの起動などの操作によって生成される余分なオーバーヘッドを節約します。特に、最も頻繁に使用されるデータをメインメモリから直接読み取ることができる場合、同期アプローチの方がパフォーマンスが向上します。

最終的にどの構成方法を選択するかについては、実験と調整を続けるのが最善の方法です。

この記事はWeChatの公開アカウント「Glacier Technology」から転載したものです。下のQRコードからフォローできます。この記事を転載する場合は、Glacier Technology 公式アカウントまでご連絡ください。

<<:  モノのインターネットにおけるフォグコンピューティングの応用

>>:  学術委員の呉和全氏: エッジ コンピューティングに関する「10 の新たな疑問」

推薦する

ウェブサイトの内部リンクを最適化する際にウェブマスターを悩ませる問題を解決する方法

現在、ウェブサイトの最適化は、基本的に外部リンク + 内部リンク + 高品質のコンテンツ + プロモ...

ウェブページの信号対雑音比と SEO 最適化

ウェブマスターの友人は皆、SEO 最適化について知っているかもしれませんが、ウェブページの信号対雑音...

アプリプロモーションで無料チャネルリソースの効果を最大化する方法

推薦する:アプリのチャネルプロモーションには、無料のチャネルリソース、無料の初回リリースリソース、無...

パブリッククラウドでのデータ保護の6つのステップ

クラウド コンピューティングのセキュリティは依然として企業にとって最大の懸念事項ですが、パブリック ...

raksmart vpsはどうですか? 「ロサンゼルス ブティック ネットワーク」ラインの VPS の簡単なレビュー

raksmart vpsはどうですか? raksmart ロサンゼルス ブティック ネットワーク ラ...

モバイル検索プロモーションが急速に市場シェアを拡大​​、「マシュー効果」が顕著に

以前と比べて、人々は現在、ルートを調べたり、オンラインで買い物をしたり、近くの飲食店やレジャー施設を...

justhost: サンクトペテルブルク IQ Data の VPS 配線とトラフィックの簡単なレビュー

サンクトペテルブルクはロシアで 2 番目に大きな都市です。Justhost はサンクトペテルブルクの...

中国のハッカー産業チェーンの規模は数百億に達する可能性があり、情報セキュリティに関する懸念が生じている。

個人情報窃盗防止のための法整備を求める特定の消費、医療、家の見学、登録などにより、個人情報が「野火の...

SAP は Baicaibang がデジタル化の基盤を築き、顧客に優れたコミュニケーション サービスを提供できるよう支援します

[51CTO.comからのオリジナル記事] 5G時代が到来しました。 5G は、さまざまな垂直アプリ...

ウェブサイトのトラフィック統計を使用してウェブサイトのコンバージョン率を判断する方法

現在、インターネットは急速に発展しており、インターネットユーザー数は急増しており、オンラインマーケテ...

実際にWeiboで正確なファンを増やす方法

Weibo は現在、インターネット上で人気のソーシャル ネットワーキングおよびマーケティング プラッ...

ネットワークプロモーションのためのマーケティングプランニングをうまく行う方法

ショートビデオ、セルフメディア、インフルエンサーのためのワンストップサービスまず、オンラインでのプロ...

エッジコンピューティングの必要性を再検討する

エッジ コンピューティングには、限られたスペースに収まり、過酷な条件に耐え、複雑な分析ルーチンを実行...

劉野熙の突然の人気の原動力:メタバースの李佳奇にならないように

バーチャルアイドル「劉野熙」は、たった128秒の動画1本で450万人のフォロワーを獲得し、一夜にして...

検索エンジンとウェブサイト: 違いは引き付け合い、類似点は反発する (パート 2)

前回の記事「検索エンジンとウェブサイト:違いは引きつけ、類似は反発する(パート2)」では、ウェブサイ...