MemCache的LRU刪除機制詳解


  本節主要講解一下MCLRU的刪除機制和一些參數的限制

  MC的過期數據惰性刪除

  1.當某個值過期后,並沒有從內存中刪除,因此,我們在進行st ats統計信息的時候,curr_items有其信息(它的數據並沒有減少)

  可以看到nameweb里面並沒有數據

  但curr_items卻為1,再次flush all 發現curr_items還是為1

    新加一個鍵值對 name

  10秒時間過期以后,發現curr_items還為1,但是當get name的時候已經沒有了,

  get name后觸發了這個機制,curr_items變成了0

   2.當某個新值去占用他的位置的時候,當成空chunk來占用

  3.get key值得時候,先判斷key是否過期,如果過期,返回空,並且清空,curr_items就減少了

  即--這個過期,只是讓用戶看不到這個數據而已,並沒有在過期的瞬間立即從內存中刪除。

  所以我們把這個成為lazy expire ,即我們常說的這個惰性失效

  好處是:節省了cpu的時間和檢測的成本。

  MCLRU刪除機制

  假如我們以122字節大小的chunk舉例,122chunk都滿了,又有新的值(長度也為122)要加入,那么要擠掉誰?

  MC這時使用的是LRU的刪除機制

  注:操作系統的常用內存管理,經常使用的算法是FIFOLRU算法

  lruleast recently used 最近最少使用

  fifofirst infirst out (先進先出)

  LRU原理:當某個單元被請求的時候,維護一個計數器,通過計數器來判斷最近誰最少使用,那就把誰踢出去。

  注:即使某個key設置的永久有效,也會被踢出來,這個就是永久數據被踢的現象。

  一些參數的限制

  key的長度:250字節(注:二進制的協議支持65536個字節)

  value的限制:1M,那我們一般都是存儲一些文本,應該是足夠了。

  假設有30g的數據要緩存,一般也不會將30g的數據緩存到一個實例中(不要把雞蛋都放到一個籃子里)盡可能在資源充足的情況下,盡可能把數據放到不同的機器上去

一般建議是開啟多個實例(可以是不同的機器,或者是在同台機器上的不同端口)

 

原文鏈接:http://www.maiziedu.com/wiki/memcache/lru/


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM