web-dev-qa-db-ja.com

memcacheがキーを削除する原因は何ですか?

Memcacheのインストールで最近キーの削除が開始されましたが、その理由はわかりません。キーの大きなグループは同時に消えます。

Memcacheは、エビクションが低いか存在しないことを報告し、アプリにはmemcacheをクリアする方法がありません(特定のキーのみを削除できます)。アプリが認識していないキーも削除されるため、有効期限が切れていると確信しています。ただし、me​​mcacheの構成はしばらくの間変更されていません。

以前にこのような問題をデバッグした人はいますか?もしそうなら、私たちがとることをお勧めする手順はありますか? memcacheの有効期限ポリシーはどの程度柔軟ですか?(たとえば)キーへの書き込み頻度に基づく基準に突然遭遇する可能性はありますか?

2
Arkaaito

これは、デプロイ時にアプリケーションにデバッグコードが残っていたことが原因であることが判明しました。

Memcache :: flushを手動で呼び出すデバッグコード。

この話の教訓は、「 『アプリケーションにはなり得ない』と言うときはいつでも、おそらく間違っている」ということだと思います。私がこの質問をしたときまでに私が知っていたと思うかもしれませんが、どうやら、私は時々リマインダーで行うことができました。

4
Arkaaito

Memcachedで有効期限が切れないようにキーを設定した場合でも、Memcachedがいっぱいになると、レコードは最も使用頻度の低いものに従って削除されます。標準のスラブベースのストレージメカニズムは、1Mbサイズのスラブから割り当てられた固定サイズのチャンクにレコードを格納します。これは高速ですが、Memcachedが大量のメモリを浪費する可能性があることも意味します。特定のサイズのチャンクを保持するためにスラブが割り当てられると、チャンクのサイズを変更できるとは思いません。大きいオブジェクトと小さいオブジェクトが混在してキャッシュされ、構成が時間の経過とともに変化する場合、memcachedが小さいオブジェクトだけを使用できる場合は、それらがはるかに大きなチャンクに格納される可能性があります。

これは、企業が好む問題の1つです。 gear6(www.gear6.com)とnorthscale(www.northscale.com)は、Memcachedディストリビューションで対応しています。

5
Chris