4.redisの有効期限ポリシーは何をしていますか?メモリのどのようなメカニズム出ていますか?LRU手書きのコードは何を達成するには?

著者:中国石シャン

インタビューの質問

Redisの有効期限ポリシーは何ですか?メモリのどのようなメカニズム出ていますか?LRU手書きのコードは何を達成するには?

心理学的分析インタビュアー

あなたは、問題を知っている無知な上に来ていない場合であっても、答えは、あなたがそのコード行を書き出てこない、書かれたRedisのデータは確かに責任があるバグの様々な、に、後者の原因システムが存在することを許可されました?

2つの一般的な問題があります。

  • どのようにデータが消えRedisのに書かれていますか?

一部の学生は、多くの場合、Redisの運用環境で一部のデータが失われ、そして、それは消滅してしまうかもしれないのホールドを取得し、発生することがあります。私の神、クラスメートは、あなたが右のああを使用しませんRedisのを説明するために、この質問をします。Redisのがキャッシュされたストレージは、それがないときに、あなたが与えましたか?

Shajiaoキャッシュ?メモリキャッシュを使用している場合。メモリが無制限の権利である、メモリが非常に貴重と制限され、ディスクが安くてたくさんあります。これは、Gの数十のメモリ上の機械であってもよいが、ハードディスクの空き容量の数Tがあります。メモリは主に、高性能、同時読み取りおよび書き込み操作に基づいているとのRedis。

今、そのメモリを使用すると、データは、20Gに入った書き込み、および場合我々はになってしまう、などだけ10Gを使用することができるのRedisとして、限定されていますか?もちろん、データは10G、10Gを取り除くと、その後のデータを保持します。どのようなデータを殺すこと?どのようなデータ保持?もちろん、アクセス頻度の低いデータを、共通のデータ保持を取り除くことです。

  • データは明確に、彼らはメモリを占有することができますどのように、有効期限が切れ?

これは、有効期限ポリシーのRedisによって決定されます。

フェイス質問解析

Redisの有効期限ポリシー

有効期限ポリシーをRedisのことである:+不活性定期的に削除します。

Redisのデフォルトを意味し、定期的に削除いわゆるそれが満了しているかどうかを確認するために、いくつかのセットのランダムなサンプルキーの有効期限に100ms毎にある、削除期限切れ。

Redisのは、あなたがすべての数百ミリ秒、キーを想定して設定し有効期限です10W、チェックはあなたのチェックで消費が鍵を期限切れ、CPU負荷が非常に高くなり、基本的には死亡したのRedisキーを、10W置きます上。パフォーマンス上の災害があるとして、この100ミリ秒は、キーのすべてを通過することに注意は、有効期限の時間間隔を設定されていません。実際には、キーのRedisのいくつかは、ランダムにチェックし、削除するには、100ミリ秒ごとに選択されています。

問題がある。しかし、定期的に削除キーはそれをzezheng、時間に戻って多くのを引き起こす可能性があり、削除されていませんか?だから、不活性削除されます。この手段は、キーの時間を得ることを、Redisのは、有効期限を設定した場合、キーは、それが期限切れにないことを確認しますか?この時間が経過した場合は削除され、リターンであなたに何かを与えることはありません。

この時点でキーが期限切れになった場合、削除、キーの時間を取得し、何も返しません。

しかし、実際には、この問題は、また、削除て不活性行かなかったあなたが定期的にバックキーの多くを逃した削除した場合、あなたは調査する時間がない、そして、何が起こるのだろうですか?メモリ内の期限切れのキーの数が多いの蓄積であれば、メモリブロックRedisの疲れ、zezhengの原因?

答えは:メモリメカニズムの外出します。

メモリ除去メカニズム

メモリ除去メカニズムは以下のとおりであるRedisの:

  • noeviction:メモリが書き込まれ、新たなデータを収容するのに十分でない場合は、新しい書き込み操作は、それが嫌れた、これはそれで誰もが一般的ではないと文句を言うだろう。
  • allkeys-LRU:新しいデータを収容するのに十分なメモリが鍵空間で書かれている場合は、キーが(これが最も一般的です)最近使用少なくとも除去されます。
  • allkeysランダム:メモリは、新しいデータを収容するのに十分ではない、ランダムにキーを削除キースペースで書かれているランダム、キーは確かに最近最もああ殺すために使用されなければならない理由は、これは、人々がそれを使用する一般的ではありません。
  • 揮発性LRU:十分なメモリがキー空間に書き込まれた新しいデータを収容するために、有効期限が設けられているキーは、最低使用頻度(これは一般的に適切ではない)を除去します。
  • 揮発性ランダム:新しいデータを収容するのに十分なメモリが鍵空間で書かれているときは、有効期限に提供され、ランダムなキーを削除します。
  • 揮発性-TTL:メモリが新しいデータを保持するには不十分である鍵空間で書かれている有効期限を提供され、キーの有効期限は、以前の優先順位が削除されています。

LRUアルゴリズムを手書き

あなたは、それは非現実的と思われる、コードが大きすぎることを、ほとんどオリジナルの手書きLRUアルゴリズムを見つけることができます。

自分のLRUを作成するために、地上から自分の手作りを求めているが、少なくとも、あなたは、Java LRUのJDKのバージョンを達成するために、既存のデータ構造を使用する方法を知っているわけではありません。

クラスLRUCache <K、V> 延びのLinkedHashMap < K、V> { プライベートファイナルint型CACHE_SIZEを; / ** *バッファに渡されるデータの最大数* * @param cacheSizeのキャッシュサイズ* / パブリックLRUCache(INT {cacheSizeの)真と// LinkedHashMapは頭、尻尾でアクセス最古の最近の訪問で、ソートへのアクセス順序に従って発現しましょう。スーパー((INT)数学.ceil(cacheSizeの/ 0.75)+ 1、。0.75F、真の); CACHE_SIZE = cacheSizeの;} @Overrideは、保護されたブールremoveEldestEntry(マップ。 エントリ< K、V> 長男){ //キャッシュは、自動的に最も古いデータを削除すると、地図データが指定された数よりも大きいです。サイズリターン()> CACHE_SIZE;}}

おすすめ

転載: www.cnblogs.com/morganlin/p/11980165.html
おすすめ