memcached - 分布式的高速緩存系統(tǒng)
memcached是一套分布式的高速緩存系統(tǒng),由LiveJournal的BradFitzpatrick開發(fā),但目前被許多網(wǎng)站使用。這是一套開放源代碼軟件,以BSDlicense授權(quán)發(fā)布。memcached缺乏認證以及安全管制,這代表應該將memcached服務器放置在防火墻后。memcached的API使用三十二比特的循環(huán)冗余校驗(CRC-32)計算鍵值后,將數(shù)據(jù)分散在不同的機器上。當表格滿了以后,接下來新增的數(shù)據(jù)會以LRU機制替換掉。由于memcached通常只是當作高速緩存系統(tǒng)使用,所以使用memcached的應用程序在寫回較慢的系統(tǒng)時(像是后端的數(shù)據(jù)庫)需要額外的代碼更新memcached內(nèi)的數(shù)據(jù)。memcached是一套分布式的高速緩存系統(tǒng),由LiveJournal的BradFitzpatrick開發(fā),但目前被許多網(wǎng)站使用。這是一套開放源代碼軟件,以BSDlicense授權(quán)發(fā)布。
功能
memcached是一套分布式的快取系統(tǒng),當初是Danga Interactive為了LiveJournal所發(fā)展的,但被許多軟件(如MediaWiki)所使用。這是一套開放源代碼軟件,以BSD license授權(quán)協(xié)議發(fā)布。
Memcached是一個高性能、分布式內(nèi)存對象緩存系統(tǒng),本質(zhì)上是通用的,但目的是為了通過減輕數(shù)據(jù)庫負載來加快動態(tài)網(wǎng)絡應用的速度。
memcached缺乏認證以及安全管制,這代表應該將memcached服務器放置在防火墻后。
memcached的API使用32位元的循環(huán)冗余校驗(CRC-32)計算鍵值后,將資料分散在不同的機器上。當表格滿了以后,接下來新增的資料會以LRU機制替換掉。由于memcached通常只是當作快取系統(tǒng)使用,所以使用memcached的應用程式在寫回較慢的系統(tǒng)時(像是后端的數(shù)據(jù)庫)需要額外的程式碼更新memcached內(nèi)的資料
memcached是以LiveJournal旗下Danga Interactive 公司的Brad Fitzpatric為首開發(fā)的一款軟件。已成為mixi、hatena、Facebook、Vox、LiveJournal等眾多服務中提高Web應用擴展性的重要因素。許多Web應用都將數(shù)據(jù)保存到RDBMS中,應用服務器從中讀取數(shù)據(jù)并在瀏覽器中顯示。但隨著數(shù)據(jù)量的增大、訪問的集中,就會出現(xiàn)RDBMS的負擔加重、數(shù)據(jù)庫響應惡化、網(wǎng)站顯示延遲等重大影響。
這時就該memcached大顯身手了。memcached是高性能的分布式內(nèi)存緩存服務器。一般的使用目的是,通過緩存數(shù)據(jù)庫查詢結(jié)果,減少數(shù)據(jù)庫訪問次數(shù),以提高動態(tài)Web應用的速度、提高可擴展性。
Memcached的守護進程(daemon)是用C寫的,但是客戶端可以用任何語言來編寫,并通過memcached協(xié)議與守護進程通信。但是它并不提供冗余(例如,復制其hashmap條目);當某個服務器S停止運行或崩潰了,所有存放在S上的鍵/值對都將丟失。
Memcached由Danga Interactive開發(fā),其最新版本發(fā)布于2010年,作者為Anatoly Vorobey和Brad Fitzpatrick。用于提升LiveJournal.com訪問速度的。LJ每秒動態(tài)頁面訪問量幾千次,用戶700萬。Memcached將數(shù)據(jù)庫負載大幅度降低,更好的分配資源,更快速訪問。
特征
memcached作為高速運行的分布式緩存服務器,具有以下的特點:
·協(xié)議簡單
·基于libevent的事件處理
·內(nèi)置內(nèi)存存儲方式
·memcached不互相通信的分布式
協(xié)議
memcached的服務器客戶端通信并不使用復雜的XML等格式,而使用簡單的基于文本行的協(xié)議。
因此,通過telnet也能在memcached上保存數(shù)據(jù)、取得數(shù)據(jù)。
下面是例子:
$telnet localhost11211
Trying 127.0.0.1
Connected to localhost.localdomain - 127.0.0.1.
Escape character is'^]'.
set foo003(保存命令)
bar(數(shù)據(jù))
STORED(結(jié)果)
get foo(取得命令)
VALUE foo03(數(shù)據(jù))
bar(數(shù)據(jù))
事件處理
libevent是個程序庫,它將Linux的epoll、BSD類操作系統(tǒng)的kqueue等事件處理功能封裝成統(tǒng)一的接口。即使對服務器的連接數(shù)增加,也能發(fā)揮O - 1的性能。memcached使用這個libevent庫,因此能在Linux、BSD、Solaris等操作系統(tǒng)上發(fā)揮其高性能。關(guān)于事件處理這里就不再詳細介紹,可以參考Dan Kegel的The C10K Problem。
存儲方式
為了提高性能,memcached中保存的數(shù)據(jù)都存儲在memcached內(nèi)置的內(nèi)存存儲空間中。由于數(shù)據(jù)僅存在于內(nèi)存中,因此重啟memcached、重啟操作系統(tǒng)會導致全部數(shù)據(jù)消失。另外,內(nèi)容容量達到指定值之后,就基于LRU - Least Recently Used算法自動刪除不使用的緩存。memcached本身是為緩存而設計的服務器,因此并沒有過多考慮數(shù)據(jù)的永久性問題。
通信分布式
memcached盡管是“分布式”緩存服務器,但服務器端并沒有分布式功能。各個memcached不會互相通信以共享信息。那么,怎樣進行分布式呢?這完全取決于客戶端的實現(xiàn)。本文也將介紹memcached的分布式。
功能
一個用PHP編寫的可視化的MemCached管理系統(tǒng)
MemAdmin是一款可視化的Memcached管理與監(jiān)控工具,使用PHP開發(fā),體積小,操作簡單。
主要功能:
服務器參數(shù)監(jiān)控:STATS、SETTINGS、ITEMS、SLABS、SIZES實時刷新
服務器性能監(jiān)控:GET、DELETE、INCR、DECR、CAS等常用操作命中率實時監(jiān)控
支持數(shù)據(jù)遍歷,方便對存儲內(nèi)容進行監(jiān)視
支持條件查詢,篩選出滿足條件的KEY或VALUE
數(shù)組、JSON等序列化字符反序列顯示
兼容memcache協(xié)議的其他服務,如Tokyo Tyrant - 遍歷功能除外
支持服務器連接池,多服務器管理切換方便簡潔
使用技巧
許多語言都實現(xiàn)了連接memcached的客戶端,其中以Perl、PHP為主。僅僅memcached網(wǎng)站上列出
的語言就有
·Perl
·PHP
·Python
·Ruby
·C#
·C/C++
·Lua
等等。
如何使用memcached-Server端
在服務端運行:
#./memcached-d-m2048-l10.0.0.40-p11211
這將會啟動一個占用2G內(nèi)存的進程,并打開11211端口用于接收請求。由于32位系統(tǒng)只能處理4G內(nèi)存的尋址,所以在大于4G內(nèi)存使用PAE的32位服務器上可以運行2-3個進程,并在不同端口進行監(jiān)聽。
如何使用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."/";//prints'one‘
print $val."/";//prints'two‘
print $val."/";//prints3
CentOS下的安裝
安裝
yum-y install memcached
設置為開機啟動
chkconfig–level2345 memcached on
啟動和停止
/etc/init.d/memcached start|stop
補充:如果安裝缺少其他支持,可以:
yum groupinstall"Development Tools"
Memcached用戶
以下站點都使用到了Memcached服務:
LiveJournal
Wikipedia
Flickr
Bebo
Typepad
Yellowbot
Youtube
WordPress.com
Craigslist
Mixi
Memcached連接
我們可以通過telnet命令并指定主機ip和端口來連接Memcached服務。
語法
命令中的HOST和PORT為運行Memcached服務的IP和端口。
實例
以下實例演示了如何連接到Memcached服務并執(zhí)行簡單的set和get命令。
本實例的Memcached服務運行的主機為127.0.0.1(本機)、端口為11211。
版本發(fā)布
2012年02月03日,Memcached1.4.13發(fā)布。
2012年08月02日,Memcached1.4.14發(fā)布。
2012年09月05日,Memcached1.4.15發(fā)布。
2015年04月25日,Memcached1.4.23發(fā)布。
