天天看點

memcached實戰系列(七)了解Memcached的資料過期方式、建立過程、查找過程

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