Memcache記憶體管理

2021-07-10 19:14:22 字數 574 閱讀 2760

在不斷malloc和free操作,會形成很小的記憶體的片段,我們無法繼續利用。

slab allocator機制

將記憶體劃分為數個slab class倉庫

各個倉庫切分成不同尺寸的小塊(chunk)

需要存放內容的時候,需要先判斷內容的大小,為期選擇合理的倉庫存放

memcache儲存著slab class在空閒時chunk列表,存放時根據列表進行分配

(最優策略 )

無法徹底解決記憶體浪費的問題,只能緩解。

增長因子:chunk塊的大小比例。

惰性刪除(好處:減少cpu占用和檢測成本)

過期不會立馬刪除,只是讓使用者看不見這個資料

當某個新值去占用他的位置時,當成chunk來使用

當get key的時候,先判斷key是否過期,如果過期返回空並刪除

lru刪除機制

lru原理:當某個單位被請求的時候,維護乙個計數器,通過計數器判斷誰最少使用

key:250位元組

value:1m,能儲存一般文字

memcache 記憶體管理

page為記憶體分配的最小單位 memcached 的記憶體分配以page為單位,預設情況下乙個page是1m slabs劃分資料空間 memcached 並不是將所有大小的資料都放在一起的,而是預先將資料空間劃分為一系列slabs,每個slab只負責一定範圍內的資料儲存。每個slab負責的空間其實...

memcache的記憶體管理機制

memcache使用了slab allocator的記憶體分配機制 按照預先規定的大小,將分配的記憶體分割成特定長度的塊,以 完全解決記憶體碎片問題 memcache的儲存涉及到slab,page,chunk三個概念 1 chunk為固定大小的記憶體空間,預設為96byte。2 page對應實際的物...

memcache中記憶體管理原始碼剖析

memcahce採用了記憶體頁面,記憶體頁面上的記憶體塊技術實現了記憶體管理器,對item的指標採用了hashtable的方法,通過item的key值實現快速定位查詢item指標的方法,這裡詳細剖析一下實現的關鍵 首先是記憶體管理,在slabs.c 中實現.1 void slabs init voi...