memcached

memcached

memcached是一套分散式的高速快取系統,由LiveJournal的Brad Fitzpatrick開發,但目前被許多網站使用。這是一套開放原始碼軟體,以BSD license授權發布。 memcached缺乏認證以及安全管制,這代表應該將memcached伺服器放置在防火牆後。 memcached的API使用三十二比特的循環冗餘校驗(CRC-32)計算鍵值後,將數據分散在不同的機器上。當表格滿了以後,接下來新增的數據會以LRU機制替換掉。由於memcached通常只是當作快取系統使用,所以使用memcached的應用程式在寫回較慢的系統時(像是後端的資料庫)需要額外的代碼更新memcached內的數據。

基本信息

功能

memcached是一套分散式的快取系統,與redis相似,當初是Danga Interactive為了LiveJournal所發展的,但被許多軟體(如MediaWiki)所使用。這是一套開放原始碼軟體,以BSD license授權協定發布。

memcached缺乏認證以及安全管制,這代表應該將memcached伺服器放置在防火牆後。

memcached的API使用32位元的循環冗餘校驗(CRC-32)計算鍵值後,將資料分散在不同的機器上。當表格滿了以後,接下來新增的資料會以LRU機制替換掉。由於memcached通常只是當作快取系統使用,所以使用memcached的套用程式在寫回較慢的系統時(像是後端的資料庫)需要額外的程式碼更新memcached內的資料

memcached 是以LiveJournal 旗下Danga Interactive 公司的Brad Fitzpatric 為首開發的一款軟體。已成為mixi、hatena、Facebook、Vox、LiveJournal等眾多服務中提高Web套用擴展性的重要因素。許多Web套用都將數據保存到RDBMS中,套用伺服器從中讀取數據並在瀏覽器中顯示。但隨著數據量的增大、訪問的集中,就會出現RDBMS的負擔加重、資料庫回響惡化、網站顯示延遲等重大影響。

這時就該memcached大顯身手了。memcached是高性能的分散式記憶體快取伺服器。一般的使用目的是,通過快取資料庫查詢結果,減少資料庫訪問次數,以提高動態Web套用的速度、提高可擴展性。

Memcached 的守護進程(daemon )是用C寫的,但是客戶端可以用任何語言來編寫,並通過memcached協定與守護進程通信。但是它並不提供冗餘(例如,複製其hashmap條目);當某個伺服器S停止運行或崩潰了,所有存放在S上的鍵/值對都將丟失。

Memcached由Danga Interactive開發,其最新版本發布於2010年,作者為Anatoly Vorobey和Brad Fitzpatrick。用於提升LiveJournal . com訪問速度的。LJ每秒動態頁面訪問量幾千次,用戶700萬。Memcached將資料庫負載大幅度降低,更好的分配資源,更快速訪問。

特徵

memcached作為高速運行的分散式快取伺服器,具有以下的特點。

· 協定簡單

· 基於libevent的事件處理

· 內置記憶體存儲方式

· memcached不互相通信的分散式

協定

memcached的伺服器客戶端通信並不使用複雜的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等事件處理功能封裝成統一的接口。即使對伺服器的連線數增加,也能發揮O(1)的性能。memcached使用這個libevent庫,因此能在Linux、BSD、Solaris等作業系統上發揮其高性能。關於事件處理這裡就不再詳細介紹,可以參考Dan Kegel的The C10K Problem。

存儲方式

為了提高性能,memcached中保存的數據都存儲在memcached內置的記憶體存儲空間中。由於數據僅存在於記憶體中,因此重啟memcached、重啟作業系統會導致全部數據消失。另外,內容容量達到指定值之後,就基於LRU(Least Recently Used)算法自動刪除不使用的快取。memcached本身是為快取而設計的伺服器,因此並沒有過多考慮數據的永久性問題。

通信分散式

memcached儘管是“分散式”快取伺服器,但伺服器端並沒有分散式功能。各個memcached不會互相通信以共享信息。那么,怎樣進行分散式呢?這完全取決於客戶端的實現。本文也將介紹memcached的分散式。

功能

一個用PHP編寫的可視化的MemCached管理系統

MemAdmin是一款可視化的Memcached管理與監控工具,使用PHP開發,體積小,操作簡單。

主要功能:

伺服器參數監控:STATS、SETTINGS、ITEMS、SLABS、SIZES實時刷新

伺服器性能監控:GET、DELETE、INCR、DECR、CAS等常用操作命中率實時監控

支持數據遍歷,方便對存儲內容進行監視

支持條件查詢,篩選出滿足條件的KEY或VALUE

數組、JSON等序列化字元反序列顯示

兼容memcache協定的其他服務,如Tokyo Tyrant (遍歷功能除外)

支持伺服器連線池,多伺服器管理切換方便簡潔

使用技巧

許多語言都實現了連線memcached的客戶端,其中以Perl、PHP為主。僅僅memcached網站上列出

的語言就有

· Perl

· PHP

· Python

· Ruby

· C#

· C/C++

· Lua

等等。

如何使用memcached-Server端

在服務端運行:

# ./memcached -d -m 2048 -l 10.0.0.40 -p 11211

這將會啟動一個占用2G記憶體的進程,並打開11211連線埠用於接收請求。由於32位系統只能處理4G記憶體的定址,所以在大於4G記憶體使用PAE的32位伺服器上可以運行2-3個進程,並在不同連線埠進行監聽。

如何使用memcached-Client端

在套用端包含一個用於描述Client的Class後,就可以直接使用,非常簡單。

PHP Example:

$options["servers"] = array("192.168.1.41:11211", "192.168.1.42:11212");

$options["debug"] = false;

$memc = new MemCachedClient($options);

$myarr = array("one","two", 3);

$memc->set("key_one", $myarr);

$val = $memc->get("key_one");

print $val[0]."\n"; // prints 'one‘

print $val[1]."\n"; // prints 'two‘

print $val[2]."\n"; // prints 3

CentOS 下的安裝

安裝
yum -y install memcached

設定為開機啟動
chkconfig --level 2345 memcached on

啟動和停止
/etc/init.d/memcached start|stop

補充:如果安裝缺少其他支持,可以:

yum groupinstall "Development Tools"

Memcached 用戶

以下站點都使用到了Memcached服務:

•LiveJournal

•Wikipedia

•Flickr

•Bebo

•Twitter

•Typepad

•Yellowbot

•Youtube

•WordPress.com

•Craigslist

•Mixi

Memcached 連線

我們可以通過 telnet 命令並指定主機ip和連線埠來連線 Memcached 服務。

語法

命令中的 HOSTPORT為運行 Memcached 服務的 IP 和 連線埠。

實例

以下實例演示了如何連線到 Memcached 服務並執行簡單的 set 和 get 命令。

本實例的 Memcached 服務運行的主機為 127.0.0.1(本機) 、連線埠為 11211。

版本發布

2012年02月03日,Memcached 1.4.13 發布。

2012年08月02日,Memcached 1.4.14 發布。

2012年09月05日,Memcached 1.4.15 發布。

2015年04月25日,Memcached 1.4.23發布。

相關詞條

相關搜尋

熱門詞條

聯絡我們