Twitter學習 MemCached基礎篇

2022-02-23 13:08:32 字數 2418 閱讀 7792

twitter大量使用memcached,mq也是基於memcached 協議的,memcached並不是新鮮的東西,但是由於它強大的影響力,有必要深入一下,這篇主要講它的基礎:

1.memcached是什麼?

memcached 是乙個高效能的分布式記憶體物件快取系統,用於動態web應用以減輕資料庫負載。它通過在記憶體中快取資料和物件來減少讀取資料庫的次數,從而提供動態、資料 庫驅動**的速度。memcached基於乙個儲存鍵/值對的hashmap。其守護程序(daemon )是用c寫的,但是客戶端可以用任何語言來編寫,並通過memcached協議與守護程序通訊。但是它並不提供冗餘(例如,複製其hashmap條目); 當某個伺服器s停止執行或崩潰了,所有存放在s上的鍵/值對都將丟失。

memcached由danga interactive開發,用於提公升livejournal.com訪問速度的。lj每秒動態頁面訪問量幾千次,使用者700萬。memcached將資料庫負載大幅度降低,更好的分配資源,更快速訪問。

一般memcached架構在資料庫層之前,應用程式先訪問memcached server,並從裡面拿資料,如果拿不到,再訪問資料庫,以減低資料庫的負載。在web應用中,io始終是個瓶頸,尤其是資料庫這層,資料庫在資料量不大時,沒有顯現明顯的效能問題,但隨著資料量的增大、訪問的集中,就會出現rdbms的負擔加重、資料庫響應惡化、 **顯示延遲等重大影響。

2.誰在用memcached?

大量的web2.0的**架構都使用了memcached,web2.0的使用者增長速度,使得資料量急劇增加,資料庫已經承受不了這麼大的壓 力,memcached幾乎成為了大**架構的標配。

livejournal

wikipedia

flickr

bebo

twitter

typepad

yellowbot

youtube

digg

wordpress

craigslist

mixi

3.memcached的應用場合

在很多時候,memcached都被濫用了,這當然少不了對它的抱怨。我經常在論壇上看見有人發貼,類似於"如何提高效率",回覆是"用memcached",至於怎麼用,用在**,用來幹什麼一句沒有。memcached不是萬能的,它也不是適用在所有場合。memcached是"分布式"的記憶體物件快取系統,那麼就是說,那些不需要"分布"的,不需要共享的,或者乾脆規模小到只有一台伺服器的應用, memcached不會帶來任何好處,相反還會拖慢系統效率,因為網路連線同樣需要資源,即使是unix本地連線也一樣。在我之前的測試資料中顯示,memcached本地讀寫速度要比直接php記憶體陣列慢幾十倍,而apc、共享記憶體方式都和直接陣列差不多。可見,如果只是本地級快取,使用memcached是非常不划算的。memcached在很多時候都是作為資料庫前端cache使用的。因為它比資料庫少了很多sql解析、磁碟操作等開銷,而且它是使用記憶體來管理資料的,所以它可以提供比直接讀取資料庫更好的效能,在大型系統中,訪問同樣的資料是很頻繁的,memcached可以大大降低資料庫壓力,使系統執行效率提公升。另外,memcached也經常作為伺服器之間資料共享的儲存媒介,例如在sso系統中儲存系統單點登陸狀態的資料就可以儲存在memcached中,被多個應用共享。

需要注意的是,memcached使用記憶體管理資料,所以它是易失的,當伺服器重啟,或者memcached程序中止,資料便會丟失,所以 memcached不能用來持久儲存資料。很多人的錯誤理解,memcached的效能非常好,好到了記憶體和硬碟的對比程度,其實memcached使用記憶體並不會得到成百上千的讀寫速度提高,它的實際瓶頸在於網路連線,它和使用磁碟的資料庫系統相比,好處在於它本身非常"輕",因為沒有過多的開銷和直接的讀寫方式,它可以輕鬆應付非常大的資料交換量,所以經常會出現兩條千兆網路頻寬都滿負荷了,memcached程序本身並不占用多少cpu資源的情況。

4.memcached的重要特徵

1)基於c/s結構,協議簡單

例如獲取命令:get和gets

2)基於libevent的網路併發連線事件處理,使得在高併發情況下,依然保持了非常高的響應能力

3)優化的記憶體儲存管理

4)基於客戶端的memcached的分布式

memcached是分布式的,但是對cache而言是集中式的,它通過client端的處理,讓key對應的hash值相同,cache資料存放在同乙個server上:

例如:**:

Xmemcached實現權重memcached節點

使用方法,與通常呼叫的唯一區別就是在建立memcachedclient的時候,memcachedclientbuilder builder new xmemcachedclientbuilder addrutil.getaddresses localhost 12000 localhost 1200...

windows xp下如何安裝memcached

二 安裝步驟 1 解壓到指定目錄,如 c memcached memcached win32 1.4.4 14。2 用cmd開啟命令視窗,轉到解壓的目錄,輸入 memcached.exe d install 3 開啟控制面板,開啟服務,可以看到memcached已經在上面可,如果沒有啟動,則手動啟動...

CentOS yum安裝和配置memcache

1,which memcached 如果已經安裝,會有 usr bin memcached 類似的輸出 memcached h memcache幫助列表 php m grep memcache 如果已經安裝,會顯示memcache,否則沒有輸出 可以用上面的三個命令檢查一下是不是已經安裝過memca...