Memcached原理分析

2021-09-02 16:30:53 字數 1204 閱讀 1689

memcached採用了名為slab allocation的機制分配,管理記憶體。

slab allocation的原理相當簡單。將分配的記憶體分割成各種尺寸的塊(chucnk),並把尺寸相同的塊分成組(chucnk的集合)如圖:

而且slab allocation還有重複使用已分配記憶體的目的。也就是說,分配到的記憶體不會釋放,而是重複利用。

slab allocation 的主要術語

memcached根據收到的資料的大小,選擇最合適資料大小的slab (圖2) memcached中儲存著slab內空閒chunk的列表,根據該列表選擇chunk,然後將資料快取於其中。

memcached內部不會監視記錄是否過期,而是在get此條記錄時檢視其時間戳,檢查記錄是否過期。這種技術稱為lazy expiration.因此memcached不會再過期監視上耗費cpu時間。

新增新資料時,memcached會優先使用已超時的記錄空間,如果空間不足,此時就要使用名為least recently used (lru最近最少使用)機制來分配空間。因此當memcached的記憶體空間不足時(無法從slab class)獲取到新空間時,就從最近未使用的記錄中搜尋,並將空間分配給新的記錄。

memcached是通過客戶端來實現分布式的,以新資料(鍵值對)的鍵通過一定的演算法選擇乙個伺服器,儲存在此伺服器的memcached中。

例如:向memcached中新增「tokyo」。將「tokyo」傳給客戶端程式庫後,客戶端實現的演算法就會根據「鍵」來決定儲存資料的memcached伺服器。伺服器選定後,即命令它儲存「tokyo」及其值。同樣,「kanagawa」「chiba」「saitama」「gunma」都是先選擇伺服器再儲存。接下來獲取儲存的資料。獲取時也要將要獲取的鍵「tokyo」傳遞給函式庫。函式庫通過與資料儲存時相同的演算法,根據「鍵」選擇伺服器。使用的演算法相同,就能選中與儲存時相同的伺服器,然後傳送get命令。只要資料沒有因為某些原因被刪除,就能獲得儲存的值。

這樣,將不同的鍵儲存到不同的伺服器上,就實現了memcached的分布式。 memcached伺服器增多後,鍵就會分散,即使一台memcached伺服器發生故障無法連線,也不會影響其他的快取,系統依然能繼續執行。

Memcached的實現原理

memcached是一種高效能分布式的記憶體快取伺服器。通過將資料庫的查詢結果存放在記憶體中,從而減少對資料的訪問,以提高動態web的速度和可擴充套件性。memcached的api使用迴圈冗餘校驗 crc 32 演算法計算鍵值後,將資料儲存在不同的機器。當分配的空間耗盡以後,資料的更通過lru le...

memcached 的使用及原理

overview 什麼是memcached?memcached是國外社群 livejournal 的開發團隊開發的高效能的分布式記憶體快取伺服器。一般的使用目的是,通過快取資料庫查詢結果,減少資料庫訪問次數,以提高動態web應用的速度 提高可擴充套件性。livejournal 團隊開發了包括 mem...

Memcached工作原理以及記憶體管理

memcached工作原理 包括服務端和客戶端,以鍵值對的形式儲存。key根據乙個 hash 演算法得到乙個 hashkey 根據這個值來確定選擇哪台伺服器儲存。客戶端根據 key的值用相同的方法計算出 hash 值,確定是哪個伺服器,然後進行連線,獲取 value值 快取策略 當服務端的hash ...