ホームページ  >  記事  >  バックエンド開発  >  Redis チュートリアル (11): 仮想メモリの概要

Redis チュートリアル (11): 仮想メモリの概要

黄舟
黄舟オリジナル
2016-12-28 15:04:451197ブラウズ

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 までご連絡ください。