検索
ホームページバックエンド開発C#.Net チュートリアルRedis チュートリアル (11): 仮想メモリの概要

1. はじめに:

ほとんどの NoSQL データベースと同様、Redis も Key/Value データ ストレージ モデルに従います。場合によっては、Redis はデータ クエリとデータ変更の効率を向上させるためにキー/値をメモリに保存しますが、このアプローチは常に良い選択であるとは限りません。これを考慮して、さらに最適化することができます。つまり、キー データのみをメモリに保持するようにして、データ取得の効率を確保し、まれに値データをディスクにスワップアウトできます。使用済み。実際のアプリケーションでは、キーの約 10% のみが比較的一般的に使用されるキーであるため、Redis は、これらのキーまたは値がスワップアウトされると、残りのあまり使用されないキーと値を仮想ストレージ経由でディスクにスワップアウトできます。値を読み取る必要がある場合、Redis は値を再度メイン メモリに読み取ります。

2. アプリケーション シナリオ:

ほとんどのデータベースにとって、最も理想的な操作方法は、すべてのデータをメモリにロードすることであり、その後のクエリ操作は完全にメモリ データに基づいて完了できます。ただし、実際には、このシナリオは一般的ではなく、データの一部しかメモリにロードできない場合が多くあります。

Redis には非常に重要な概念があります。つまり、キーは通常交換されません。そのため、データベース内に多数のキーがあり、各キーが小さい値のみに関連付けられている場合、このシナリオはあまり適切ではありません。仮想メモリを使用します。逆に、データベースに含まれるキーの数が少ないものの、各キーに関連付けられた値が非常に大きい場合、このシナリオは仮想ストレージの使用に最適です。
実際のアプリケーションでは、仮想メモリがより完全な役割を果たし、システムの動作効率を向上させるために、多数の小さな値を持つキーを少数の大きな値を持つキーにマージできます。最も重要な方法は、元のキー/値モードをハッシュベースのモードに変更することです。これにより、多くの元のキーをハッシュの属性にできるようになります。

3. 設定:

1). 現在の Redis サーバーが起動時に仮想メモリ機能を有効にできるように、設定ファイルに次の設定項目を追加します。

vm-enabled yes

2) 構成ファイルで Redis に使用可能な仮想メモリの最大バイト数を設定します。メモリ内のデータがこの値より大きい場合、一部のオブジェクトがディスクにスワップアウトされ、スワップアウトされたオブジェクトによって占有されていたメモリは、使用されているメモリがこの値を下回るまで解放されません。

     vm-max-memory (bytes)

Redis の交換ルールは、「最も古い」データを考慮することです。つまり、最も長期間使用されていないデータがスワップアウトされます。 2 つのオブジェクトの経過時間が同じ場合、値の大きい方のデータが最初にスワップアウトされます。 Redis はキーをディスクに交換しないことに注意してください。そのため、キーのデータだけで仮想メモリ全体がいっぱいになっている場合、このデータ モデルは仮想メモリ メカニズムの使用に適していないか、値をより高く設定する必要があります。キー データ全体を収容できる大きさです。実際のアプリケーションでは、Redis 仮想メモリの使用を検討する場合、頻繁なスワップインとスワップアウトを避けるために、できるだけ多くのメモリを Redis に割り当てる必要があります。


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

vm-pages 134217728
    vm-page-size 32

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


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

    vm-max-threads 4

CPU cores。如果将该值设置为0,那么Redis在与交换文件进行IO交互时,将以同步的方式执行此操作。
    对于Redis而言,如果操作交换文件是以同步的方式进行,那么当某一客户端正在访问交换文件中的数据时,其它客户端如果再试图访问交换文件中的数据,该客户端的请求就将被挂起,直到之前的操作结束为止。特别是在相对较慢或较忙的磁盘上读取较大的数据值时,这种阻塞所带来的影响就更为突兀了。然而同步操作也并非一无是处,事实上,从全局执行效率视角来看,同步方式要好于异步方式,毕竟同步方式节省了线程切换、线程间同步,以及线程拉起等操作产生的额外开销。特别是当大部分频繁使用的数据都可以直接从主内存中读取时,同步方式的表现将更为优异。
    如果你的现实应用恰恰相反,即有大量的换入换出操作,同时你的系统又有很多的cores,有鉴于此,你又不希望客户端在访问交换文件之前不得不阻塞一小段时间,如果确实是这样,我想异步方式可能更适合于你的系统。
    至于最终选用哪种配置方式,最好的答案将来自于不断的实验和调优。

以上就是Redis教程(十一):虚拟内存介绍的内容,更多相关内容请关注PHP中文网(www.php.cn)!


声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
C#と.NETランタイム:それらがどのように連携するかC#と.NETランタイム:それらがどのように連携するかApr 19, 2025 am 12:04 AM

C#と.NETランタイムは密接に連携して、開発者に効率的で強力なプラットフォームの開発機能に力を与えます。 1)C#は、.NETフレームワークとシームレスに統合するように設計されたタイプセーフおよびオブジェクト指向のプログラミング言語です。 2).NETランタイムは、C#コードの実行を管理し、ガベージコレクション、タイプの安全性、その他のサービスを提供し、効率的でクロスプラットフォームの操作を保証します。

C#.NET開発:始めるための初心者向けガイドC#.NET開発:始めるための初心者向けガイドApr 18, 2025 am 12:17 AM

C#.NET開発を開始するには、次のことが必要です。1。C#の基本的な知識と.NETフレームワークのコア概念を理解する。 2。変数、データ型、制御構造、関数、クラスの基本概念をマスターします。 3。LINQや非同期プログラミングなど、C#の高度な機能を学習します。 4.一般的なエラーのためのデバッグテクニックとパフォーマンス最適化方法に精通してください。これらの手順を使用すると、C#.NETの世界に徐々に浸透し、効率的なアプリケーションを書き込むことができます。

C#と.NET:2つの関係を理解し​​ますC#と.NET:2つの関係を理解し​​ますApr 17, 2025 am 12:07 AM

C#と.NETの関係は切り離せませんが、同じものではありません。 C#はプログラミング言語であり、.NETは開発プ​​ラットフォームです。 C#は、コードの書き込み、.NETの中間言語(IL)にコンパイルされ、.NET Runtime(CLR)によって実行されるために使用されます。

c#.netの継続的な関連性:現在の使用法を見るc#.netの継続的な関連性:現在の使用法を見るApr 16, 2025 am 12:07 AM

C#.NETは、複数のアプリケーション開発をサポートする強力なツールとライブラリを提供するため、依然として重要です。 1)C#は.NETフレームワークを組み合わせて、開発を効率的かつ便利にします。 2)C#のタイプの安全性とゴミ収集メカニズムは、その利点を高めます。 3).NETは、クロスプラットフォームの実行環境とリッチAPIを提供し、開発の柔軟性を向上させます。

Webからデスクトップまで:C#.NETの汎用性Webからデスクトップまで:C#.NETの汎用性Apr 15, 2025 am 12:07 AM

c#.netisversatileforbothwebanddesktopdevelopment.1)forweb、useasp.netfordynamicapplications.2)fordesktop、equindowsorwpfforrichinterfaces.3)usexamarinforcross-platformdeveliment、enabling deshacrosswindows、

c#.net and the Future:新しいテクノロジーへの適応c#.net and the Future:新しいテクノロジーへの適応Apr 14, 2025 am 12:06 AM

C#と.NETは、継続的な更新と最適化を通じて、新しいテクノロジーのニーズに適応します。 1)C#9.0および.NET5は、レコードタイプとパフォーマンスの最適化を導入します。 2).Netcoreは、クラウドネイティブおよびコンテナ化されたサポートを強化します。 3)ASP.Netcoreは、最新のWebテクノロジーと統合されています。 4)ML.NETは、機械学習と人工知能をサポートしています。 5)非同期プログラミングとベストプラクティスはパフォーマンスを改善します。

c#.netはあなたにぴったりですか?その適用性の評価c#.netはあなたにぴったりですか?その適用性の評価Apr 13, 2025 am 12:03 AM

c#.netissuitableforenterprise-levelApplicationsとsystemduetoitsSystemdutyping、richlibraries、androbustperformance.

.NET内のC#コード:プログラミングプロセスの調査.NET内のC#コード:プログラミングプロセスの調査Apr 12, 2025 am 12:02 AM

.NETでのC#のプログラミングプロセスには、次の手順が含まれます。1)C#コードの作成、2)中間言語(IL)にコンパイルし、3).NETランタイム(CLR)によって実行される。 .NETのC#の利点は、デスクトップアプリケーションからWebサービスまでのさまざまな開発シナリオに適した、最新の構文、強力なタイプシステム、および.NETフレームワークとの緊密な統合です。

See all articles

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

mPDF

mPDF

mPDF は、UTF-8 でエンコードされた HTML から PDF ファイルを生成できる PHP ライブラリです。オリジナルの作者である Ian Back は、Web サイトから「オンザフライ」で PDF ファイルを出力し、さまざまな言語を処理するために mPDF を作成しました。 HTML2FPDF などのオリジナルのスクリプトよりも遅く、Unicode フォントを使用すると生成されるファイルが大きくなりますが、CSS スタイルなどをサポートし、多くの機能強化が施されています。 RTL (アラビア語とヘブライ語) や CJK (中国語、日本語、韓国語) を含むほぼすべての言語をサポートします。ネストされたブロックレベル要素 (P、DIV など) をサポートします。

SublimeText3 英語版

SublimeText3 英語版

推奨: Win バージョン、コードプロンプトをサポート!

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

Dreamweaver Mac版

Dreamweaver Mac版

ビジュアル Web 開発ツール

VSCode Windows 64 ビットのダウンロード

VSCode Windows 64 ビットのダウンロード

Microsoft によって発売された無料で強力な IDE エディター