php各種緩存策略對(duì)比
來(lái)源:昆明多彩網(wǎng)絡(luò)公司 日期:2010-10-15 閱讀: 發(fā)表評(píng)論
為什么要使用緩存?
1、 減少數(shù)據(jù)庫(kù)訪問(wèn),降低數(shù)據(jù)庫(kù)壓力
2、加速系統(tǒng)訪問(wèn)速度,提升系統(tǒng)性能
二、常用的幾種緩存(這里說(shuō)的均為數(shù)據(jù)緩存)
1、文件緩存(以文件形式存在磁盤(pán)上)
2、Memcache(保存在內(nèi)存里)
3、前端代理
4、Mysql內(nèi)存表(這個(gè)算不上緩存)
三、比較幾種緩存的效率,選出適合自己系統(tǒng)用的緩存架構(gòu)
1、文件緩存
常用的文件緩存包括:zend cache,各種框架所帶的緩存,smarty所帶的緩存。優(yōu)點(diǎn):靜態(tài)化頁(yè)面使得訪問(wèn)速度加快,降低服務(wù)器的壓力。缺點(diǎn):對(duì)于實(shí)時(shí)性數(shù)據(jù)或是不斷變化的數(shù)據(jù)會(huì)造成數(shù)據(jù)不同步,當(dāng)然你會(huì)說(shuō)那我每次可以修改相應(yīng)的緩存或是刪除了再建立,但是這么做一定會(huì)造成io的開(kāi)銷,還有就是不要存太大文件,太大文件讀取的時(shí)候會(huì)造成系統(tǒng)開(kāi)銷很大,也不要存太小的文件,太小的文件會(huì)造成磁盤(pán)碎片。
2、Memcached
Memcached作為php5的一個(gè)新的擴(kuò)展緩存類,是一個(gè)分布式內(nèi)存緩存系統(tǒng)。Memcached是“分布式”的內(nèi)存對(duì)象緩存系統(tǒng),那么就是說(shuō),那些不需要“分布”的,不需要共享的,或者干脆規(guī)模小到只有一臺(tái)服務(wù)器的應(yīng)用,memcached不會(huì)帶來(lái)任何好處,相反還會(huì)拖慢系統(tǒng)效率,因?yàn)榫W(wǎng)絡(luò)連接同樣需要資源,即使是UNIX本地連接也一樣。在我之前的測(cè)試數(shù)據(jù)中顯示,memcached本地讀寫(xiě)速度要比直接PHP內(nèi)存數(shù)組慢幾十倍,而APC、共享內(nèi)存方式都和直接數(shù)組差不多。可見(jiàn),如果只是本地級(jí)緩存,使用memcached是非常不劃算的。
Memcahce如何部署:
首先啟動(dòng)n個(gè)memcache進(jìn)程,這些進(jìn)程可以在不同的server的不同端口上.然后使用perl的api可以方便的一次鏈接多個(gè)memcache,存儲(chǔ)讀取機(jī)制不明.不久找到php的一個(gè)MemcachedClient類,基本上就是perl里api的再實(shí)現(xiàn).它使用的fscokopen或者socket系列function來(lái)直接讀取memcache----這說(shuō)明只要清楚memcache的網(wǎng)絡(luò)協(xié)議,你甚至不用裝什么php的memcacheextenstion.看了這個(gè)類的實(shí)現(xiàn),基本上弄清楚,它的分布式應(yīng)用差不多就是將不同的key保存在不同的memcachedaemon,不會(huì)保留多個(gè)副本,也就不存在多memcache同步的問(wèn)題了。
memcached也經(jīng)常作為服務(wù)器之間數(shù)據(jù)共享的存儲(chǔ)媒介,例如在SSO系統(tǒng)中保存系統(tǒng)單點(diǎn)登陸狀態(tài)的數(shù)據(jù)就可以保存在memcached中,被多個(gè)應(yīng)用共享
優(yōu)點(diǎn):通過(guò)簡(jiǎn)單的配置,可以把數(shù)據(jù)放到另一臺(tái)機(jī)子的緩存,通過(guò)socket讀取。這種方法比磁盤(pán)存儲(chǔ)要快很多,減少io讀取,提升web的性能。
缺點(diǎn):如果memcache機(jī)子重啟,那么所有緩存數(shù)據(jù)將丟失,不適宜存儲(chǔ)永久數(shù)據(jù)和數(shù)據(jù)量大的數(shù)據(jù)。
總結(jié):memcached使用內(nèi)存并不會(huì)得到成百上千的讀寫(xiě)速度提高,它的實(shí)際瓶頸在于網(wǎng)絡(luò)連接,它和使用磁盤(pán)的數(shù)據(jù)庫(kù)系統(tǒng)相比,好處在于它本身非常“輕”,因?yàn)闆](méi)有過(guò)多的開(kāi)銷和直接的讀寫(xiě)方式,它可以輕松應(yīng)付非常大的數(shù)據(jù)交換量,所以經(jīng)常會(huì)出現(xiàn)兩條千兆網(wǎng)絡(luò)帶寬都滿負(fù)荷了,memcached進(jìn)程本身并不占用多少CPU資源的情況?偨Y(jié):
緩存的目的:讓被期待性高的數(shù)據(jù)暫存入性能相對(duì)好的存儲(chǔ)設(shè)備以達(dá)到使系統(tǒng)性能提升的目的。任何緩存,無(wú)論頁(yè)面、數(shù)據(jù)、對(duì)象等都是按照上面描述來(lái)進(jìn)行策略選擇的。也就是說(shuō),不管需要緩存的是什么,你只用選出被期待性高的,然后把他們存入性能相對(duì)較好的存儲(chǔ)設(shè)備就行了。最重要的是找出你系統(tǒng)的瓶頸,然后采用不同的緩存。
發(fā)表評(píng)論評(píng)論列表(有 條評(píng)論)