memcached

Memcached 是一個高性能的分佈式內存對象緩存系統,對於動態Web適用於緩解數據庫負載。它經過在內存中緩存數據和對象來下降讀取數據庫的次數,從而提升動態、數據庫驅動站點的速度。Memcached基於一個存儲鍵/值對的hashmap。其守護進程(daemon )是用C寫的,但是client可以用不論什麼語言來編寫,並經過memcached協議與守護進程通訊。算法

簡單介紹數據庫

memcached是一套分佈式的快取系統,當初是Danga Interactive爲了LiveJournal所發展的,但被不少軟件(如MediaWiki)所使用。這是一套開放源碼軟件,以BSD license受權協議公佈。
memcached缺少認證以及安全管制。這表明應該將memcachedserver放置在防火牆後。
memcached的API使用32位元的循環冗餘校驗(CRC-32)計算鍵值後,將資料分散在不一樣的機器上。當表格滿了之後,接下來新增的資料會以LRU機制替換掉。由於memcached一般僅僅是看成快取系統使用,因此使用memcached的應用程式在寫回較慢的系統時(像是後端的數據庫)需要額外的程式碼更新memcached內的資料
memcached 是以LiveJournal 旗下Danga Interactive 公司的Brad Fitzpatric 爲首開發的一款軟件。已成爲mixi、hatena、Facebook、Vox、LiveJournal等衆多服務中提升Web應用擴展性的重要因素。不少Web應用都將數據保存到RDBMS中。應用server從中讀取數據並在 瀏覽器中顯示。

但隨着數據量的增大、訪問的集中,就會出現RDBMS的負擔加劇、數據庫響應惡化、站點顯示延遲等重大影響。後端

這時就該memcached大顯身手了。

memcached是高性能的分佈式內存緩存server。通常的使用目的是,經過緩存數據庫查詢結果,下降數據庫訪問次數。以提升動態Web應用的速度、提升可擴展性。瀏覽器

Memcached 的守護進程(daemon )是用C寫的,但是 client可以用不論什麼語言來編寫,並經過memcached協議與守護進程通訊。但是它並不提供 冗餘(好比,複製其hashmap條目)。當某個serverS中止執行或崩潰了。所有存放在S上的鍵/值對都將丟失。
Memcached由Danga Interactive開發,其最新版本號公佈於2010年,做者爲Anatoly Vorobey和Brad Fitzpatrick。用於提高LiveJournal . com訪問速度的。LJ每秒 動態頁面訪問量幾千次。用戶700萬。Memcached將 數據庫負載大幅度減小,更好的分配資源,更高速訪問。

特徵

memcached做爲快速執行的分佈式 緩存server。具備下面的特色。
· 協議簡單
· 基於 libevent的事件處理
· 內置 內存存儲方式
· memcached不互相通訊的分佈式

協議

memcached的server client通訊並不使用複雜的XML等格式。而使用簡單的基於 文本行的協議。
所以,經過telnet也能在memcached上保存數據、取得數據。如下是樣例。
$ telnet localhost 11211
Trying 127.0.0.1...
Connected to localhost.localdomain (127.0.0.1).
Escape character is '^]'.
set foo 0 0 3 (保存命令)
bar (數據)
STORED (結果)
get foo (取得命令)
VALUE foo 0 3 (數據)
bar (數據)

事件處理

libevent是個 程序庫,它將Linux的epoll、BSD類操做系統的kqueue等事件處理功能封裝成統一的接口。即便對server的鏈接數添加,也能發揮O(1)的性能。memcached使用這個libevent庫,所以能在Linux、BSD、Solaris等操做系統上發揮其高性能。關於事件處理這裏就再也不具體介紹,可以參考Dan Kegel的The C10K Problem。

存儲方式

爲了提升性能,memcached中保存的數據都存儲在memcached內置的 內存 存儲空間中。由於數據僅存在於 內存中。所以從新啓動memcached、從新啓動操做系統會致使全部數據消失。另外,內容容量達到指定值以後,就基於LRU(Least Recently Used)算法本身主動刪除不使用的 緩存。memcached自己是爲緩存而設計的server,所以並無過多考慮數據的永久性問題。

通訊分佈式

memcached雖然是「分佈式」 緩存server。但server端並無分佈式功能。各個memcached不會互相通訊以共享信息。

那麼,如何進行分佈式呢?這全然取決於client實現。本文還將介紹memcached分散式。緩存

版權聲明:本文博主原創文章,博客,未經贊成不得轉載。安全

相關文章
相關標籤/搜索