Redisのデータベース・データ・メモリがいっぱいになって、それがダウンしているのでしょうか?IT戦略のそこRedisのメモリと同様に、LRUアルゴリズムでは、彼は状況がいっぱいになっ現れせません、Redisのを使用しているとき、私たちはRedisのは、ときに、特定の能力を堆積させるために使用できる最大メモリサイズを設定する必要があります。答えはあります排除、というように。。。その後、Redisのメモリ制圧戦略を模索するのが著者に従ってください。
Redisのメモリフットプリントサイズ
私たちは、Redisのが原因でシステムの限られたメモリサイズの、メモリベースのキーと値のデータベースであることを知っているので、我々はRedisのを使用しているときのRedisを使用できる最大メモリサイズを設定することができます。
図1に示すように、プロファイルの構成
redis.conf、次の次の設定インストールディレクトリメモリサイズRedisのプロファイルを追加することにより
//设置Redis最大占用内存大小为100M`
maxmemory 100mb`
redis.confファイルのインストールディレクトリを使用していないRedisの設定ファイルは、起動時のRedisのサービスは、コンフィギュレーション・ファイルのRedisを指定するパラメータを渡すことができます
図2に示すように、コマンドを変更します
Redisのは、動的に実行コマンドのサポートにより、メモリサイズを変更します
//设置Redis最大占用内存大小为100M`
127.0.0.1:6379> config set maxmemory 100mb`
//获取设置的Redis能使用的最大内存大小`
127.0.0.1:6379> config get maxmemory`
最大メモリサイズやメモリサイズを制限しない64ビットオペレーティングシステムでは0に設定された最大メモリサイズを設定しない場合は、32ビットオペレーティングシステムでメモリ3ギガバイトを使い切ります
メモリのうちのRedis
あなたが最大の占有率Redisのメモリサイズを設定することができるので、メモリの構成は、時間が不足しています。ときにそれがメモリ不足でなく、追加していくのRedis何メモリの利用可能なデータは、それが存在していないですか?
Redisのは、実際にこのような状況に対処するためのいくつかの戦略を定義しています。
noeviction(デフォルトのポリシー):書込み要求の場合は、直接(要求しない限り、DELといくつかの特別な要求)エラーを返し、使用できなくなりました
LRU-AllKeys:すべての鍵からLRUアルゴリズムを使用して行います
LRU-揮発性:セットからキーの有効期限をLRUアルゴリズムを使用して行います
ランダムAllKeys:から全てのキーデータのうちランダム
ランダム揮発性:セットキー有効期限がランダムに解消
TTL-揮発性:キー有効期限の設定では、キーに従って行わ有効期限は、早くより優先的には、期限切れの除去
使用するときは揮発性-LRUを、揮発性ランダムは、揮発性-TTLは、どのキーが存在しない場合は、これらの3つの戦略をなくすことができ、その後、noevictionエラーが返されるよう
政策から抜け出すとメモリを設定する方法
現在のメモリ戦略から出て行け。
127.0.0.1:6379> config get maxmemory-policy
复制代码
(redis.confファイルを変更)コンフィギュレーションファイルを使用してポリシーの外に設定します:
maxmemory-policy allkeys-lru
复制代码
除去policyコマンドを変更します。
127.0.0.1:6379> config set maxmemory-policy allkeys-lru`
LRUアルゴリズム
LRUとは何ですか?
Redisの上でいえば、あなたはLRUアルゴリズムでは、メモリが不足して使用することができ、最大メモリ使用量が終わって使用することができ、その後、LRUアルゴリズムそれは何ですか?
LRU(最低使用してログに記録します)、つまり、少なくとも最近、キャッシュ置換アルゴリズムを使用していました。キャッシュメモリとして使用する場合、キャッシュサイズは、一般的に固定されています。キャッシュがいっぱいになると、この時間は内部キャッシュにデータを追加していくために、私たちは、古いデータの一部を排除し、新たなデータストレージ用メモリ領域を解放する必要があります。今度は、LRUアルゴリズムを使用することができます。核となるアイデアは、次のとおりです。データは最新の期間で使用されていない場合は、将来は非常に小さいの可能性を使用することですので、それを除去することができます。
LRUは、Redisのを実現しています
おおよそLRUアルゴリズム
従来のLRUアルゴリズムでも同じではない近似LRUアルゴリズムを使用してのRedis。アウト近似LRUアルゴリズムデータ無作為抽出法、毎回ランダム5(デフォルト)最低使用頻度のうち内側からアウトキー、キー。
例:大きなmaxmemory-サンプル10 maxmenory-サンプル構成、アウト結果近い厳密LRUアルゴリズムサンプル数がmaxmemory-サンプルパラメータによって修正することができます
近似RedisのLRUアルゴリズムを実現するために、24ビットフィールドの各キーの余分な増加のために、キーが最後にアクセスしたために時間が保存さ。
LRUのRedis3.0最適化された近似
最適化のRedis3.0 LRUアルゴリズム概数。新しいアルゴリズムは、候補プール(サイズ16)、アクセス時間に従ってソートされたデータ・プールを維持し、最初のキーをランダムアクセス時間がプール未満である場合にのみ、ランダムに選択されたキーのそれぞれをプールに選択され、候補プールが満たされるまでプールに前の最小時間。満たされた場合には、存在する場合、最終アクセス時間の最大のプールを削除するには(最近アクセスし)、その後、新しいキーに配置する必要があります。
場合最近アクセス直接最小時間のプールから選択し、除去する必要は(最長がアクセスされていない)ライン上のキーを排除しました。
LRUアルゴリズムでコントラスト
私たちは、各LRUアルゴリズムの精度を比較した実験データnの一定数によって内部のRedisを追加する最初の、Redisの利用可能なメモリを使い切った、新しいデータのRedisを追加するために内部下るN / 2、あなたが一部を排除する必要があり、この時間することができますデータは、厳密なLRUアルゴリズムに従って、データが中、n / 2に参加する最初のを排除すべきです。図は、各LRUアルゴリズムの次の比較を生成します
あなたは、ポイントは3つの異なる色であり、図を参照してくださいすることができます:
-
ライトグレーは、データの外にあります
-
グレイは、古いデータを排除していません
- グリーンが新しく追加されたデータであり、
私たちは、サンプル数が厳格なLRUにRedis3.0最も近い10を生成している見ることができます。5サンプルの同じ数を使用しながら、Redis3.0も優れRedis2.8。
LFUアルゴリズム
LFUアルゴリズムは内部Redis4.0プラス新しいフェーズアウト戦略です。そのフルネームがされて使用頻度の最も低いの中核アイデアはめったにアクセスが解消されなかった最近訪問したキーの優先順位の周波数に応じて段階的に廃止されると、それ以上は滞在してアクセスされました。
LFUアルゴリズムがより良いアクセスされているキーの熱を表すことができます。あなたはLRUアルゴリズムを使用している場合は、長い時間のための鍵は、訪問されることはありません、たまにしか一度だけ訪れている、ホットデータであると考えられて解消されないだろう、といくつかの重要な将来にアクセスされる可能性が高いです排除されました。あなたはLFUアルゴリズムを使用している場合は1がホットデータであるキーを使用しないため、発生しません。
LFU 2つの戦略があります。
揮発性-LFU:キーに設定された有効期限のうち、キーを使用してLFUアルゴリズム
allkeys-LFU:キーデータの全てにおける位相アウトを使用してLFUアルゴリズム
前と同じで話すの外に設定するこれら2つの戦略を使用しますが、注意すべきポイントは以下のRedis4.0で提供される場合、この戦略は唯一、Redis4.0の設定で2週間以上にできることであることは文句を言うだろう
問題
最後に、小さな問題を残して、何人かの人々ではなく、記事のコメント欄であなたの答えを与えることができ、正確なLRUアルゴリズムを使用してのRedisのおおよそのLRUアルゴリズムでは、我々は一緒に研究を議論し、なぜ私は説明していないことに気づいたかもしれません。