1. はじめに:
ほとんどの NoSQL データベースと同様、Redis も Key/Value データ ストレージ モデルに従います。場合によっては、Redis はデータ クエリとデータ変更の効率を向上させるためにキー/値をメモリに保存しますが、このアプローチは常に良い選択であるとは限りません。これを考慮して、さらに最適化することができます。つまり、キー データのみをメモリに保持するようにして、データ取得の効率を確保し、まれに値データをディスクにスワップアウトできます。使用済み。実際のアプリケーションでは、キーの約 10% のみが比較的一般的に使用されるキーであるため、Redis は、これらのキーまたは値がスワップアウトされると、残りのあまり使用されないキーと値を仮想ストレージ経由でディスクにスワップアウトできます。値を読み取る必要がある場合、Redis は値を再度メイン メモリに読み取ります。
Redis には非常に重要な概念があります。つまり、キーは通常交換されません。そのため、データベース内に多数のキーがあり、各キーが小さい値のみに関連付けられている場合、このシナリオはあまり適切ではありません。仮想メモリを使用します。逆に、データベースに含まれるキーの数が少ないものの、各キーに関連付けられた値が非常に大きい場合、このシナリオは仮想ストレージの使用に最適です。
実際のアプリケーションでは、仮想メモリがより完全な役割を果たし、システムの動作効率を向上させるために、多数の小さな値を持つキーを少数の大きな値を持つキーにマージできます。最も重要な方法は、元のキー/値モードをハッシュベースのモードに変更することです。これにより、多くの元のキーをハッシュの属性にできるようになります。
vm-enabled yes
2) 構成ファイルで Redis に使用可能な仮想メモリの最大バイト数を設定します。メモリ内のデータがこの値より大きい場合、一部のオブジェクトがディスクにスワップアウトされ、スワップアウトされたオブジェクトによって占有されていたメモリは、使用されているメモリがこの値を下回るまで解放されません。
vm-max-memory (bytes)
3). 構成ファイル内のページ数と各ページが占めるバイト数を設定します。データをメモリからディスクに転送するには、スワップ ファイルを使用する必要があります。これらのファイルはデータの永続性とは関係がないため、Redis は終了する前にこれらをすべて削除します。スワップ ファイルへのほとんどのアクセスはランダム アクセスであるため、スワップ ファイルをソリッド ステート ディスクに保存することをお勧めします。これにより、システムの動作効率が大幅に向上します
vm-pages 134217728 vm-page-size 32
4) Redis 構成ファイルには非常に重要な構成パラメーターがあります。
vm-max-threads 4
CPU cores。如果将该值设置为0,那么Redis在与交换文件进行IO交互时,将以同步的方式执行此操作。
对于Redis而言,如果操作交换文件是以同步的方式进行,那么当某一客户端正在访问交换文件中的数据时,其它客户端如果再试图访问交换文件中的数据,该客户端的请求就将被挂起,直到之前的操作结束为止。特别是在相对较慢或较忙的磁盘上读取较大的数据值时,这种阻塞所带来的影响就更为突兀了。然而同步操作也并非一无是处,事实上,从全局执行效率视角来看,同步方式要好于异步方式,毕竟同步方式节省了线程切换、线程间同步,以及线程拉起等操作产生的额外开销。特别是当大部分频繁使用的数据都可以直接从主内存中读取时,同步方式的表现将更为优异。
如果你的现实应用恰恰相反,即有大量的换入换出操作,同时你的系统又有很多的cores,有鉴于此,你又不希望客户端在访问交换文件之前不得不阻塞一小段时间,如果确实是这样,我想异步方式可能更适合于你的系统。
至于最终选用哪种配置方式,最好的答案将来自于不断的实验和调优。
以上就是Redis教程(十一):虚拟内存介绍的内容,更多相关内容请关注PHP中文网(www.php.cn)!