Memcached原始碼解析

2021-06-26 01:33:32 字數 1174 閱讀 1822

memcached是乙個非常有名的高效能分布式快取系統, 採用memcached作為快取系統能顯著提高系統的效能。

想要更好地發揮對memcached的效能, 對其源**進行分析顯得非常必要。 本文基於memcached-1.4.15進行源**分析,

假設讀者對socket, 管道,多執行緒程式設計, hash演算法等概念有基本的了解。文系列將從以下幾個方面展開分析:

本文將主要介紹前面兩個部分,後面兩個部分其他文章會進行介紹。

概念與特點

使用場景

系統架構

一致性hash演算法

基本命令

概念與特點

作為乙個快取系統,memcached的主要任務在於通過在記憶體中快取一些常用資料,減少對資料庫的儲存操作,一方面將資料儲存在記憶體中, 加快資料的儲存速度;另一方面減輕資料庫的負載,提高資料庫的利用率。 如下圖所示:

在應用程式首次獲取資料時,從資料庫中獲取資料,並儲存memcached伺服器中,再次獲取資料時,先查詢memcached是否存在所需要的資料,

若存在,則從memcached中返回資料,否則,從資料庫中獲取, 這也是資料庫快取的基本流程。memcahced是一種開源的高效能分布式

記憶體物件快取系統,主要通過減輕資料庫負載來加速動態網頁應用的訪問。主要具有以下幾個特點:

主要採用tcp連線同server端進行通訊,命令基於簡單的文字行協議。

libevent是乙個高效的事件處理框架,採用libevent進行事件處理,既能減少memcached本身的複雜度,

同時能有效結合libevent跨平台高效處理事件響應的特性,保證memcached的事件處理能力。

採用用hash表來儲存鍵值對,保證資料的高效訪問,將資料儲存在內建的記憶體空間,結合lru(least recent used)

演算法自動刪除使用頻率最低的快取,既能減少memcached所佔的儲存空間,又能保證資料訪問的速度。

memcached的「分布式」特指客戶-伺服器之間一對多的分布式對映,伺服器之間不存在分布式的概念,

各個memcached伺服器之間不會互相通訊實現資訊共享, 也不會對儲存物件進行複製備份保證資料

的安全性(實現備份來保證資料安全性需要額外的開銷,cache資料沒有必要保證這樣的可靠性)。

Memcached原始碼分析 命令解析(3)

1 流程圖 1 當進入到conn read狀態後,會呼叫try read network 將socket資料讀取到conn的rbuf中。例如 char rbuf set key 0 0 4 r nget name r n 2 然後進入到conn parse cmd狀態,呼叫try read comm...

memcached 的原始碼安裝

伺服器端主要是安裝memcache伺服器端.另外,memcache用到了libevent這個庫用於socket的處理,所以還需要安裝libevent,libevent的最新版本是libevent 1.3。如果你的系統已經安裝了libevent,可以不用安裝 官網 1.先安裝libevent。這個東西...

Fabric 原始碼解析 原始碼目錄解析

這裡對重要的一些目錄進行說明 bccsp 與密碼學 加密 簽名 證書等等 相關的加密服務 將fabric中用到的密碼學相關的函式抽象成了一組介面,便於拓展。bddtests 一種新型的軟體開發模式 行為驅動開 需求 開發 common 一些公共庫 錯誤處理 日誌處理 賬本儲存 策略以及各種工具等等 ...