做實驗
爲什麼呢?
Memcached的過期刪除機制
1.當某個值過期後,並沒有內存刪除,因此stats統計時curr_item有其信息。
2.當取值時,判斷是否過期,如果過期,返回空,並且清空,curr_item就減少了。
3.如果之前沒有get過,將不會自動刪除,當某個新值去佔用他的位置時,當成空chunk來佔用。
這個過期只是不讓用戶看不到這個數據而已,並沒有在過期的瞬間立即從內存刪除,這個稱爲lazy expiration 惰性失效機制。
好處:減少了CPU時間和檢測的成本。
如果以122bytes的chunk大小舉例,122的chunk都滿了,又有新的值(長度爲120)要加入,要擠掉誰?
Memcached此處用的LRU刪除機制(操作系統的內存管理,常用FIFO.LRU刪除)
LRU:least Recenly Used 最近最少使用
FIFO:first in first out 先進先出
原理:當某個單元被請求時,維護一個計數器,通過計數器來判斷最近最少被使用。就把誰踢出。
注:即使某個key是設置的永久有效期,也一樣會被踢出來!這就是--老數據被踢現象。