Memcached工作原理以及記憶體管理
阿新 • • 發佈:2019-01-09
Memcached工作原理
包括服務端和客戶端,以鍵值對的形式儲存。Key根據一個hash演算法得到一個hashkey,根據這個值來確定選擇哪臺伺服器儲存。客戶端根據key的值用相同的方法計算出hash值,確定是哪個伺服器,然後進行連線,獲取value值
快取策略
當服務端的hash表滿了以後,新來的資料會替代老資料。Kv對儲存的有效時限是在客戶端用app設定並作為引數傳遞給ms的。
服務端對有時限的資料不會立即刪除,當有新資料進來時並且沒有多餘空間,才去刪除舊資料。
memcached的記憶體管理
1.page固定大小為1mb 當slab class空間不足時,就會申請page,並將page按照chunk的大小切割。
2.Slab class(板塊) memecached是以slab class為單位管理的,每個slab對應一個或多個大小相同的chunk。每個slab class都有它自己的統計資訊以及自己的LRU(最少用到的資料)。在啟動memcached時,指定-vv引數,可以在啟動日誌中檢視每個slab class的chunk大小。
3.Chunk 用來存放key和value值。Memcached會根據元素的大小來判斷存到哪個slab中,元素不一定能佔滿整個chunk,所以可能會存在空間剩餘
Memecached有自己的記憶體管理,是為了防止系統記憶體碎片
記憶體的回收
一個新的資料進來時,如果該板塊已經存滿,而且page也已經用光。
Memcached將會去檢查舊資料中失效的元素然後重用他的記憶體(前提是在同一個板塊裡),如果沒有失效的元素,就檢查最近很少用的元素(LRU),佔用他的記憶體。Memcached不會主動收回記憶體,失效的元素記憶體釋放,記憶體用光時才被再次使用