云南網(wǎng)站建設(shè)創(chuàng)新企業(yè) 昆明多彩網(wǎng)絡(luò)公司

在線qq:540105663

php各種緩存策略對比

來源:昆明多彩網(wǎng)絡(luò)公司 日期:2010-10-15 閱讀: 發(fā)表評論

緩存是程序開發(fā)無法避讓的技術(shù),它有很多好的好處,可以加快網(wǎng)站打開速度,減少服務(wù)器負(fù)載等等好處,這里來對比一下各種緩存機制的優(yōu)勢和劣勢

為什么要使用緩存?

1、 減少數(shù)據(jù)庫訪問,降低數(shù)據(jù)庫壓力

2、加速系統(tǒng)訪問速度,提升系統(tǒng)性能

二、常用的幾種緩存(這里說的均為數(shù)據(jù)緩存)

1、文件緩存(以文件形式存在磁盤上)

2、Memcache(保存在內(nèi)存里)

3、前端代理

4、Mysql內(nèi)存表(這個算不上緩存)

三、比較幾種緩存的效率,選出適合自己系統(tǒng)用的緩存架構(gòu)

1、文件緩存

常用的文件緩存包括:zend cache,各種框架所帶的緩存,smarty所帶的緩存。優(yōu)點:靜態(tài)化頁面使得訪問速度加快,降低服務(wù)器的壓力。缺點:對于實時性數(shù)據(jù)或是不斷變化的數(shù)據(jù)會造成數(shù)據(jù)不同步,當(dāng)然你會說那我每次可以修改相應(yīng)的緩存或是刪除了再建立,但是這么做一定會造成io的開銷,還有就是不要存太大文件,太大文件讀取的時候會造成系統(tǒng)開銷很大,也不要存太小的文件,太小的文件會造成磁盤碎片。

2、Memcached

Memcached作為php5的一個新的擴展緩存類,是一個分布式內(nèi)存緩存系統(tǒng)。Memcached是“分布式”的內(nèi)存對象緩存系統(tǒng),那么就是說,那些不需要“分布”的,不需要共享的,或者干脆規(guī)模小到只有一臺服務(wù)器的應(yīng)用,memcached不會帶來任何好處,相反還會拖慢系統(tǒng)效率,因為網(wǎng)絡(luò)連接同樣需要資源,即使是UNIX本地連接也一樣。在我之前的測試數(shù)據(jù)中顯示,memcached本地讀寫速度要比直接PHP內(nèi)存數(shù)組慢幾十倍,而APC、共享內(nèi)存方式都和直接數(shù)組差不多。可見,如果只是本地級緩存,使用memcached是非常不劃算的。

Memcahce如何部署:

首先啟動n個memcache進程,這些進程可以在不同的server的不同端口上.然后使用perl的api可以方便的一次鏈接多個memcache,存儲讀取機制不明.不久找到php的一個MemcachedClient類,基本上就是perl里api的再實現(xiàn).它使用的fscokopen或者socket系列function來直接讀取memcache----這說明只要清楚memcache的網(wǎng)絡(luò)協(xié)議,你甚至不用裝什么php的memcacheextenstion.看了這個類的實現(xiàn),基本上弄清楚,它的分布式應(yīng)用差不多就是將不同的key保存在不同的memcachedaemon,不會保留多個副本,也就不存在多memcache同步的問題了。

memcached也經(jīng)常作為服務(wù)器之間數(shù)據(jù)共享的存儲媒介,例如在SSO系統(tǒng)中保存系統(tǒng)單點登陸狀態(tài)的數(shù)據(jù)就可以保存在memcached中,被多個應(yīng)用共享

優(yōu)點:通過簡單的配置,可以把數(shù)據(jù)放到另一臺機子的緩存,通過socket讀取。這種方法比磁盤存儲要快很多,減少io讀取,提升web的性能。
缺點:如果memcache機子重啟,那么所有緩存數(shù)據(jù)將丟失,不適宜存儲永久數(shù)據(jù)和數(shù)據(jù)量大的數(shù)據(jù)。

總結(jié):memcached使用內(nèi)存并不會得到成百上千的讀寫速度提高,它的實際瓶頸在于網(wǎng)絡(luò)連接,它和使用磁盤的數(shù)據(jù)庫系統(tǒng)相比,好處在于它本身非常“輕”,因為沒有過多的開銷和直接的讀寫方式,它可以輕松應(yīng)付非常大的數(shù)據(jù)交換量,所以經(jīng)常會出現(xiàn)兩條千兆網(wǎng)絡(luò)帶寬都滿負(fù)荷了,memcached進程本身并不占用多少CPU資源的情況?偨Y(jié):
緩存的目的:讓被期待性高的數(shù)據(jù)暫存入性能相對好的存儲設(shè)備以達(dá)到使系統(tǒng)性能提升的目的。任何緩存,無論頁面、數(shù)據(jù)、對象等都是按照上面描述來進行策略選擇的。也就是說,不管需要緩存的是什么,你只用選出被期待性高的,然后把他們存入性能相對較好的存儲設(shè)備就行了。最重要的是找出你系統(tǒng)的瓶頸,然后采用不同的緩存。
 

發(fā)表評論評論列表(有 條評論)