Memcached

是什麼導致 memcache 刪除鍵?

  • October 13, 2010

我們的 memcache 安裝最近開始刪除密鑰,我們不知道為什麼。大量的鍵同時消失。

Memcache 報告驅逐很少甚至不存在,我們的應用程序無法清除 memcache(它只能刪除特定的鍵)。即使是應用程序不知道的密鑰也會被刪除,因此我們非常確信它們已經過期。但是,我們的 memcache 配置已經有一段時間沒有被觸及了。

以前有沒有人調試過這樣的問題,如果有,你有什麼建議我們採取的步驟嗎?memcache 的過期策略有多靈活 - 我們是否可能突然遇到基於(例如)對鍵的寫入頻率的標準?

事實證明,這是由於在部署應用程序時將一些調試程式碼留在了應用程序中。

調試程式碼手動呼叫 Memcache::flush。

我認為這個故事的寓意是:“任何時候你說,‘它不可能是應用程序’,你可能錯了。” 你會認為我在問這個問題時就已經知道了,但顯然,我可以不時提醒一下。

即使您已在 Memcached 中將鍵設置為不過期,如果 Memcached 已滿,記錄也會根據最近最少使用來刪除。標準的基於slab的儲存機制將記錄儲存在從1Mb大小的slab中分配的固定大小的塊中。雖然速度很快,但這也意味著 Memcached 最終會浪費大量記憶體。一旦分配了一個平板來保存特定大小的塊,我認為這些塊不能調整大小。如果記憶體了大對象和小對象的混合,並且組合隨時間而變化,那麼 memcached 最終可能會將小對象儲存在更大的塊中,如果這些是唯一可用的。

這是諸如 gear6 (www.gear6.com) 和 northscale (www.northscale.com) 等公司在其 Memcached 發行版中解決的問題之一。

引用自:https://serverfault.com/questions/144971