2012-04-12 7 views
12

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

答えて

35

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/

それが助けてくれることを願います!

+0

本当にありがとう、私が探していた答えでした!追加のリソースをありがとう! – zaphod1984

+0

ああ、そのツールをありがとう! – ahskaus

0

私はこの声明が正しいとは思っていません。

「戻るあなたの質問に、メモリがいっぱいになったとき、あなたはアイテムを保存しようと、memcachedは最も使用アイテムを探し、その後、あなたがへの書き込みしようとしているスラブ内期限切れのアイテムのために最初に検索します。だから、はい、キーの有効期限を考慮に入れるか、または期限切れのキーがLRUの前に最初に適用されます。

Memcacheのは、LRU(それは限り、彼らはより多くの最近使用した別のキー(でも有効)よりも、任意の期限切れのアイテムを持っている場合、それは問題ではありません)に応じてアイテムを立ち退かされます。

Memcache 1.4.4で少し前にテストされました。

関連する問題