本節主要講解一下MC的LRU的刪除機制和一些參數的限制
MC的過期數據惰性刪除
1.當某個值過期后,並沒有從內存中刪除,因此,我們在進行st ats統計信息的時候,curr_items有其信息(它的數據並沒有減少)
可以看到name和web里面並沒有數據
但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的時間和檢測的成本。
MC的LRU刪除機制
假如我們以122字節大小的chunk舉例,122的chunk都滿了,又有新的值(長度也為122)要加入,那么要擠掉誰?
MC這時使用的是LRU的刪除機制
注:操作系統的常用內存管理,經常使用的算法是FIFO,LRU算法
lru:least recently used 最近最少使用
fifo:first in,first out (先進先出)
LRU原理:當某個單元被請求的時候,維護一個計數器,通過計數器來判斷最近誰最少使用,那就把誰踢出去。
注:即使某個key設置的永久有效,也會被踢出來,這個就是永久數據被踢的現象。
一些參數的限制
key的長度:250字節(注:二進制的協議支持65536個字節)
value的限制:1M,那我們一般都是存儲一些文本,應該是足夠了。
假設有30g的數據要緩存,一般也不會將30g的數據緩存到一個實例中(不要把雞蛋都放到一個籃子里)盡可能在資源充足的情況下,盡可能把數據放到不同的機器上去
一般建議是開啟多個實例(可以是不同的機器,或者是在同台機器上的不同端口)