13

memcache で使用可能なメモリがいっぱいになると、memcache は LRU (最後に最近使用された) アルゴリズムを使用してメモリを解放します。私の質問は、LRU アルゴリズムは、期限切れのアイテムではなく、一定期間使用されていない (最後に最近使用された) エントリを削除するのでしょうか? 期限切れのエントリは、その時点では削除されませんが、次に誰かがアクセスしようとしたとき (AFAIR) に削除されます。では、LRU アルゴリズムは (また) キーの有効期限を考慮しますか?

4

2 に答える 2

37

memcached がどのように LRU を実行するかを理解するには、memcached がアイテムを格納する方法をさらに深く理解する必要があります。アイテムはサイズに応じて格納されます。たとえば、100k のすべてのアイテムを同じスラブに格納し、200k の他のアイテムを別のスラブに格納します。

メモリがいっぱいになり、100k のアイテムを保存しようとすると、memcached はそのスラブに LRU を適用します。200k のスラブで有効期限が切れているか使用されていないキーがある場合、それらはそこに残りますが、100k のスラブにホット キーしかない場合は、アルゴリズムに基づくものの 1 つが削除されます。

質問に戻ると、メモリがいっぱいでアイテムを保存しようとすると、memcached は最初に書き込み先のスラブで期限切れのアイテムを探し、次に使用頻度の低いアイテムを探します。はい、キーの有効期限が考慮されます。さらに良いことに、LRU の前に期限切れのキーが最初に処理されます。

また、有効期限を過ぎたアイテムを取得しようとすると、そのアイテムは削除され、メモリが再利用されます。

詳細(LRUも説明するmemcachedメモリ割り当てについてはGoogleでたくさんあるので、これについて読むことがたくさんあります):

http://returnfoo.com/2012/02/memcached-memory-allocation-and-optimization-2/

http://www.adayinthelifeof.nl/2011/02/06/memcache-internals/

そして、すべてのmemcachedトピックでお勧めする本当に素晴らしいツール:

http://code.google.com/p/phpmemcacheadmin/

それが役に立てば幸い!

于 2012-04-13T10:43:52.840 に答える