インタビュアー: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 の新たな疑問」

推薦する

音楽ウェブサイトの有料化計画は著作権管理局から明確な支持を受けるが、オンライン視聴は引き続き無料

音楽ダウンロードの「無料ランチ」の終焉に関する最近の議論に関して、記者は昨日、テンセントのQQミュー...

ケーススタディ: モバイル Web 製品を最適化するための 4 つの重要なポイント

モバイルデバイスの使用は世界中で日々増加しています。複数の異なるデバイスにわたって優れた Web エ...

マルチクラウド戦略に関する5つのよくある質問: ワークロードごとの最適化の必要性

イノベーションが継続的に進む今日の世界では、企業は増大するビジネス ニーズを満たすためにさまざまな ...

古いドメイン名のマイニングに関するチュートリアル(即時ランキングに必須のツール)と実践的な共有

月収10万元の起業の夢を実現するミニプログラム起業支援プラン10 日以上、皆さんと有益な情報をシェア...

Ganji.comの閉鎖は、グループ購入のジレンマを反映し、2度目の再編のパニックを引き起こしている。

Ganji.com の閉鎖の噂は、共同購入部門で騒動を引き起こしている。Ganji.com は閉鎖し...

初心者ウェブマスターのためのリンクベイトの作り方

リンク ベイト、ウェブマスターはみんなリンク ベイトについて聞いたことがあるでしょうが、どうやって作...

コンテンツの最適化 - 王の道

コンテンツの最適化は、ウェブサイトを運営する上で最も重要な最適化方法です。商用の最適化サービスとは異...

ステーションBのゲーム事業!

数年経っても、ACGを拠点とするビリビリは依然としてゲーム事業を処理できていない。ビリビリは3年前に...

実践経験: フレンドリーリンクはウェブサイトのランキングにどれほど影響を与えるか

フレンドリーリンクに関しては、誰もがよく知っていると思いますが、特に初心者にとっては、フレンドリーリ...

微博マーケティングは2.0時代に突入:ファンになることやコメントをすることだけが目的ではない

今日、「大手Weiboアカウントは死んでいる」という記事を見ました。この記事では、大手Weiboアカ...

友好的なリンクを交換する際の注意点といくつかの原則について簡単に説明します。

フレンドリーリンクは、ウェブサイトのエクスポートリンクの最も重要な部分でもあり、キーワードランキング...

3つの主要なクラウドネイティブデータベース: Aurora、PolarDB、Socrates

1. 「クラウドネイティブ データベース」とは何ですか?クラウド コンピューティングの出現により、企...

ftlcloud: 限定版 - 宣伝のためにお金を失っている、月額 9 元、ゴールド シールド + 天極防御、CC を無視、香港\韓国\米国のデータ センター

9元でどんなクラウドサーバーが買えますか? ftlcloud は自社の宣伝 (および市場獲得) を目...

hmbcloud の年間 30 ドルの NAT ベースの韓国 cn2 gia vps の簡単なレビュー

hmbcloudはアメリカの企業(中国系アメリカ人が経営)で、cn2 giaとIPLCのハイエンドラ...