1:快速定位slab classid,先計算Item長度
key鍵長+flag+suffix(16位元組)+value值長+結構大小(32位元組),如90byte
如果>1MB,無法存儲丢棄
取最小備援的slab class
如:有48,96,120,存90會選擇96
(1)slot:檢查slab回收空間slot裡是否有剩餘chunk
delete:delete時标記到slot
exptime:get時檢查的過期對象标記到slot
(2)end_page_ptr:檢查page中是否有剩餘chunk
(3)memory:記憶體還有剩餘空間可以用于開辟新的slab
(4)LRU
Memcached的資料存儲方式的缺點
由于chunk的大小是預先配置設定好的特定長度,是以如果資料不能完全填滿
chunk,那麼剩餘的空間就浪費了
Memcached不會監控記錄是否過期,而是在外部來擷取資料的時候,才檢查記錄的時間戳,是以稱為Lazy Expiration。
LRU(Least Recently Used最近最少使用)
當空間不足的時候,Memcached會優先使用已經過期的資料空間,如果還不夠,那麼就會把最近最少使用的對象的空間釋放出來使用。
懶惰删除機制
删除item對象時,不釋放記憶體,作删除标記,指針放入slot回收插槽,下次配置設定的時候直接使用要特别注意:Memcached的LRU不是全局的,而是針對slab的,可以說是區域性的
每個slab進行lru