久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

使用memcached進(jìn)行內(nèi)存緩存: 一個(gè)藏袍

 魚非魚 2007-06-04

使用memcached進(jìn)行內(nèi)存緩存

舊文重發(fā)
2005.8.9

通常的網(wǎng)頁緩存方式有動(dòng)態(tài)緩存和靜態(tài)緩存等幾種,,在ASP.NET中已經(jīng)可以實(shí)現(xiàn)對(duì)頁面局部進(jìn)行緩存,,而使用memcached的緩存比ASP.NET的局部緩存更加靈活,可以緩存任意的對(duì)象,,不管是否在頁面上輸出,。而memcached最大的優(yōu)點(diǎn)是可以分布式的部署,這對(duì)于大規(guī)模應(yīng)用來說也是必不可少的要求,。
LiveJournal.com使用了memcached在前端進(jìn)行緩存,,取得了良好的效果,而像wikipedia,sourceforge等也采用了或即將采用memcached作為緩存工具,。memcached可以大規(guī)模網(wǎng)站應(yīng)用發(fā)揮巨大的作用,。

Memcached是什么?
Memcached是高性能的,分布式的內(nèi)存對(duì)象緩存系統(tǒng),,用于在動(dòng)態(tài)應(yīng)用中減少數(shù)據(jù)庫負(fù)載,,提升訪問速度。
Memcached由Danga Interactive開發(fā),,用于提升LiveJournal.com訪問速度的,。LJ每秒動(dòng)態(tài)頁面訪問量幾千次,用戶700萬,。Memcached將數(shù)據(jù)庫負(fù)載大幅度降低,,更好的分配資源,更快速訪問。

如何使用memcached-Server端?
在服務(wù)端運(yùn)行:
# ./memcached -d -m 2048 -l 10.0.0.40 -p 11211
這將會(huì)啟動(dòng)一個(gè)占用2G內(nèi)存的進(jìn)程,,并打開11211端口用于接收請(qǐng)求。由于32位系統(tǒng)只能處理4G內(nèi)存的尋址,,所以在大于4G內(nèi)存使用PAE的32位服務(wù)器上可以運(yùn)行2-3個(gè)進(jìn)程,,并在不同端口進(jìn)行監(jiān)聽。

如何使用memcached-Client端?
在應(yīng)用端包含一個(gè)用于描述Client的Class后,,就可以直接使用,,非常簡(jiǎn)單。
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

為什么不使用數(shù)據(jù)庫做這些,?

暫且不考慮使用什么樣的數(shù)據(jù)庫(MS-SQL, Oracle, Postgres, MysQL-InnoDB, etc..), 實(shí)現(xiàn)事務(wù)(ACID,,Atomicity, Consistency, Isolation, and Durability )需要大量開銷,特別當(dāng)使用到硬盤的時(shí)候,,這就意味著查詢可能會(huì)阻塞,。當(dāng)使用不包含事務(wù)的數(shù)據(jù)庫(例如Mysql-MyISAM),上面的開銷不存在,,但讀線程又可能會(huì)被寫線程阻塞,。
Memcached從不阻塞,速度非???。

為什么不使用共享內(nèi)存?
最初的緩存做法是在線程內(nèi)對(duì)對(duì)象進(jìn)行緩存,但這樣進(jìn)程間就無法共享緩存,,命中率非常低,,導(dǎo)致緩存效率極低。后來出現(xiàn)了共享內(nèi)存的緩存,,多個(gè)進(jìn)程或者線程共享同一塊緩存,,但畢竟還是只能局限在一臺(tái)機(jī)器上,多臺(tái)機(jī)器做相同的緩存同樣是一種資源的浪費(fèi),,而且命中率也比較低,。
Memcached Server和Clients共同工作,實(shí)現(xiàn)跨服務(wù)器分布式的全局的緩存,。并且可以與Web Server共同工作,,Web Server對(duì)CPU要求高,對(duì)內(nèi)存要求低,,Memcached Server對(duì)CPU要求低,,對(duì)內(nèi)存要求高,所以可以搭配使用,。

Mysql 4.x的緩存怎么樣?
Mysql查詢緩存不是很理想,,因?yàn)橐韵聨c(diǎn):
當(dāng)指定的表發(fā)生更新后,查詢緩存會(huì)被清空,。在一個(gè)大負(fù)載的系統(tǒng)上這樣的事情發(fā)生的非常頻繁,,導(dǎo)致查詢緩存效率非常低,,有的情況下甚至還不如不開,因?yàn)樗鼘?duì)cache的管理還是會(huì)有開銷,。
在32位機(jī)器上,,Mysql對(duì)內(nèi)存的操作還是被限制在4G以內(nèi),但memcached可以分布開,,內(nèi)存規(guī)模理論上不受限制,。
Mysql上的是查詢緩存,而不是對(duì)象緩存,,如果在查詢后還需要大量其它操作,,查詢緩存就幫不上忙了。
如果要緩存的數(shù)據(jù)不大,,并且查詢的不是非常頻繁,,這樣的情況下可以用Mysql 查詢緩存,不然的話memcached更好,。

數(shù)據(jù)庫同步怎么樣,?
這里的數(shù)據(jù)庫同步是指的類似Mysql Master-Slave模式的靠日志同步實(shí)現(xiàn)數(shù)據(jù)庫同步的機(jī)制。
你可以分布讀操作,,但無法分布寫操作,,但寫操作的同步需要消耗大量的資源,而且這個(gè)開銷是隨著slave服務(wù)器的增長而不斷增長的,。
下一步是要對(duì)數(shù)據(jù)庫進(jìn)行水平切分,,從而讓不同的數(shù)據(jù)分布到不同的數(shù)據(jù)庫服務(wù)器組上,從而實(shí)現(xiàn)分布的讀寫,,這需要在應(yīng)用中實(shí)現(xiàn)根據(jù)不同的數(shù)據(jù)連接不同的數(shù)據(jù)庫,。
當(dāng)這一模式工作后(我們也推薦這樣做),更多的數(shù)據(jù)庫導(dǎo)致更多的讓人頭疼的硬件錯(cuò)誤,。
Memcached可以有效的降低對(duì)數(shù)據(jù)庫的訪問,,讓數(shù)據(jù)庫用主要的精力來做不頻繁的寫操作,而這是數(shù)據(jù)庫自己控制的,,很少會(huì)自己阻塞 自己,。

Memcached快嗎?

非???,它使用libevent,可以應(yīng)付任意數(shù)量打開的連接(使用epoll,,而非poll),,使用非阻塞網(wǎng)絡(luò)IO,分布式散列對(duì)象到不同的服務(wù)器,查詢復(fù)雜度是O(1),。

參考資料:
Distributed Caching with Memcached | Linux Journal
http://www./
http://www./article/7451

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn),。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式,、誘導(dǎo)購買等信息,謹(jǐn)防詐騙,。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,,請(qǐng)點(diǎn)擊一鍵舉報(bào),。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多