著者は、正確にスケジュールされたタスクと遅延キュー処理機能を備えた、高同時実行シナリオ向けのシンプルで安定したスケーラブルな遅延メッセージ キュー フレームワークを個人的に開発しました。半年以上前にオープンソース化されて以来、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 の新たな疑問」
月収10万元の起業の夢を実現するミニプログラム起業支援プラン9月は収穫の季節です。私たちは、熊張オー...
Baidu にはウェブサイトの評価期間があることは誰もが知っていますが、公式には評価期間というものが...
今日、QQグループで、a5の毎日のQ&Aから「SEOを行う小さな会社で、1人だけで対応できま...
CatalystHostは2010年に設立され、ドメイン名は年に更新されました。実際、低価格のVPS...
エッジ AI はエッジ コンピューティングから生まれました。エッジコンピューティングは、エッジ処理と...
ブログを書いている人は、ただ単に友達を作りたいだけではないと思います。オンラインでのつながりは価値の...
ウェブサイト分析は、すべての SEO 最適化担当者にとって不可欠なスキルです。最適化担当者が最適化が...
[[434468]] Redis 分散ロックの話題はよくあるようです。面接中や仕事中など、どこでも見...
検索結果:検索者の検索リクエストに応じて、検索エンジンは一致する Web ページへのリンクを返します...
ウェブサイトがKアウトされる事件が相次いでいます。6月から現在まで、ウェブサイトがKアウトされること...
ローエンドVPSランキングでは、ramnodeが再びトップに返り咲きました。これは皆さんも認めるとこ...
——簡体字中国語の設定と強化されたセキュリティ制御は、Citrixのローカリゼーションの取り組みを際...
rethinkvps はダラス データ センターで OVZ VPS をリリースしました。割引コードを...
データは企業のデジタル変革の中核要素の 1 つであり、データベースはデータのライフラインをサポートす...
3月7日、Dangdang.comは最新の財務報告書を発表しました。データによると、Dangdang...