理解memcached的資料儲存方式(重要)

2021-08-16 07:53:12 字數 1176 閱讀 9224

一,理解memcached的資料儲存方式被稱為slab allocator,其基本方式是:

1,先把記憶體分成很多個slab,這個大小是預先規定好的,以解決記憶體碎片的問題。分配給slab的記憶體空間被稱為page,預設是1m。乙個slab下可以有多個page。

2,然後把乙個page分成很多個chunk塊,chunk塊是用於快取記錄的空間。chunk的大小是先有乙個基本值,然後根據增長因子(1.25)來增大。

3,slab class : 記憶體區類別(48byte-1m) , 每個類別有乙個slab classid

4,  memcached 裡面儲存著slab內空閒的chunk列表,當收到要儲存的item的時候,它會根據item的大小去選擇乙個最合適的slab,然後找到空閒的chunk,把資料放進去。

二,新建item分配記憶體的過程

1,快速定位slab classid , 先計算item的長度

key鍵長 + flag + suffix (17位元組) + value值長 + 結構大小(32位元組)  取最小冗餘的 slab class

2,按順序尋找可用的chunk

(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的資料過期方式:

(1)lazy expiration(延遲/惰性 過期)

memcached不會監控記錄是否過期,而是在外部來獲取資料的時候,才檢查記錄時間戳。因此被稱為lazy expiration

(2)lru(least recently used )  

當空間不足的時候,memcached會優先使用已經過期的資料空間,如果還不夠,那麼就會把最近最少使用的物件的空間釋放出來。 不是全域性的,而是針對slab,可以說是區域性的。

(3)懶惰刪除機制

刪除item物件時,不釋放記憶體,做刪除標記,指標放入slot**插槽,下次分配的時候直接使用。

memcached資料彙總

facebook對memcached的提公升 memcached原始碼分析之記憶體管理篇 the time is passing iteye技術 memcached原始碼分析之記憶體管理篇之item結構圖及slab結構圖 yxnyxnyxnyxnyxn的專欄 關於memcache記憶體管理模型的理解...

sharedpreferences資料儲存

例項134 使用sharedpreferences儲存使用者輸入的使用者名稱和密碼,並在第二個activity中顯示 sharedpreferences 類供開發人員儲存和獲取基本資料型別的鍵值對,該類主要用於基本型別,如booleans,floats,ints,longs,strings。在應用程...

Hyperledger Fabric資料儲存結構

原文 hyperledger fabric支援多鏈。每個鏈對應一套賬本。所以區塊鏈每個peer節點會維護多套賬本。每個超級賬本包含以下元素 每個peer節點會維護4個db,它們分別是 如下圖 因只展示了單鏈的資料儲存情況,故idstore未在圖中展示 fabric db.png 其中,世界狀態和賬本...