2011-10-03 100 views
2

我看過這個 - How does the lazy expiration mechanism in memcached operate?Memcached中的延遲過期

所以我有一個問題。 是否有可能/建議自己製作一個程序,定期檢查memcached中的所有項目,爲每個項目發送GET請求,以便刪除過期的項目?

我想這樣做的原因是因爲我想對Memcached中使用的百分比進行適當的控制。如果這個百分比接近100%,我將永遠不能確定是否應該增加更多的記憶,或者如果我不應該擔心,因爲有很多過期的項目。

我使用PHP,可惜這並沒有返回memcached的所有項目(不知道爲什麼):

$allSlabs = $memcache->getExtendedStats('slabs'); 
    foreach ($allSlabs as $server => $slabs) { 
     foreach ($slabs as $slabId => $slabMeta) { 
      $cdump = $memcache->getExtendedStats('cachedump', (int)$slabId); 
      foreach ($cdump as $keys => $arrVal) { 
       foreach ($arrVal as $key => $v) { 
        echo $key, "\n"; 
       } 
      } 
     } 
    } 
+0

我不確定,但我認爲「已使用百分比」僅檢查未過期的項目,我很確定我的緩存從未接近100%,但如果過期的項目將計入使用-stats,它應該只會變大,而不會,百分比波動(增加_和減少)。我認爲主動清除根本不是必需的嗎?LRU只會使用_after_替換過期的項目有意義 – Nanne

+0

會很好!我會測試自己,爲某些MB添加一些垃圾,並且看看截止日期之後%是否仍然很高,謝謝。 – Nuno

+0

到目前爲止它還沒有減少。它應該在10分鐘後減少。但我知道你在說什麼,因爲我看到它也在波動,但可能需要一段時間。 – Nuno

回答

2

你應該只使用驅逐率,看看是否需要添加更多的內存。如果memcached不得不拋出一個對象以騰出空間存儲下一個對象,那麼驅逐統計數據將會增加。 (您可以查看「回收」狀態以查看我們可以回收內存以存儲新項目的內存的次數。

您建議的代碼會通過立即丟棄其內容來阻塞服務器然後

+1

似乎我的服務器不顯示「回收」屬性。我知道驅逐。我此時有「0」(這很好),但我的想法是避免這些。感謝您的幫助! – Nuno