資源描述:
《基于php的緩存應(yīng)用方案性能分析與對(duì)比》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在行業(yè)資料-天天文庫(kù)。
1、http://www.paper.edu.cn基于PHP的緩存應(yīng)用方案性能分析與對(duì)比吳明洲,孫文生北京郵電大學(xué)電信工程學(xué)院,北京(100876)E-mail:lyingkisser@gmail.com摘要:PHP是一種解釋型的腳本語(yǔ)言,主要用于WEB的服務(wù)端,在當(dāng)今LAMP平臺(tái)及類似平臺(tái)中具有十分重要的地位,其執(zhí)行效率直接關(guān)系到網(wǎng)站的響應(yīng)時(shí)間和用戶體驗(yàn),因此,采用一種合適的緩存應(yīng)用方案,對(duì)PHP執(zhí)行代碼或執(zhí)行過(guò)程中頻繁讀取的變量進(jìn)行緩存,是LAMP平臺(tái)優(yōu)化的關(guān)健環(huán)節(jié)。本文通過(guò)對(duì)四種主流PHP緩存應(yīng)用方案的性能分析和對(duì)比,給出一種最優(yōu)的P
2、HP緩存應(yīng)用方案。關(guān)鍵詞:LAMP,PHP,緩存,優(yōu)化1.引言近年來(lái),隨著互聯(lián)網(wǎng)的持續(xù)升溫和web2.0技術(shù)的不斷發(fā)展,各種基于PHP動(dòng)態(tài)腳本技術(shù)應(yīng)用的網(wǎng)站層出不窮,從大型的門戶網(wǎng)站,到各處各樣的論壇和博客系統(tǒng),再到引來(lái)無(wú)數(shù)關(guān)注的視頻分享網(wǎng)站,都大量架構(gòu)在LAMP平臺(tái),采用PHP作為其后臺(tái)的業(yè)務(wù)邏輯處理語(yǔ)言。但是,這些網(wǎng)站隨著訪問(wèn)量的快速上升,服務(wù)器的系統(tǒng)負(fù)載越來(lái)越重,訪問(wèn)速度變得越來(lái)越慢。因此,有些軟件開發(fā)工程師開始研究并著手開發(fā)PHP的緩存應(yīng)用系統(tǒng),即把編譯好的PHP代碼緩存進(jìn)內(nèi)存中,從而可以在下次訪問(wèn)時(shí),PHP腳本不需要重新編譯而
3、是從內(nèi)存中直接得到執(zhí)行,或者把需要反復(fù)存取的變量放在共享內(nèi)存中,可以大大加快網(wǎng)站的訪問(wèn)速度,減少系統(tǒng)的運(yùn)行負(fù)載。然而,由于LAMP架構(gòu)都是開源免費(fèi)的,這樣一來(lái),不管是PHP還是apache,他們不同版本所支持的特性就很可能發(fā)生不小的變化,由于PHP緩存器是直接依賴PHP而開發(fā)的,當(dāng)PHP的發(fā)行版本發(fā)生變化時(shí),過(guò)去老的PHP緩存器很可能無(wú)法和新的PHP版本兼容,這樣一來(lái),對(duì)于一個(gè)特定版本的PHP,選擇哪一種既穩(wěn)定也有著良[1]好性能表現(xiàn)的PHP緩存器,往往是一個(gè)難題。本文將在LAMP平臺(tái)上面,通過(guò)對(duì)eaccelerator,[2][3][
4、4]xcache,memcache,apc這四種主流PHP緩存應(yīng)用系統(tǒng)的性能測(cè)試和比較,給出一個(gè)在實(shí)際應(yīng)用環(huán)境下的最合理的解決方案。2.PHP緩存的基本概念[5]由于PHP的語(yǔ)言特性,由PHP編寫的腳本程序,客戶端請(qǐng)求一次,服務(wù)端調(diào)用PHP解析器執(zhí)行一次,所有的變量在當(dāng)前的腳本文件執(zhí)行完畢以后全部釋放,在下次裝載執(zhí)行時(shí)再重新建立。因此,在這個(gè)過(guò)程中,可以把需要執(zhí)行的腳本程序以某種形式預(yù)編譯進(jìn)內(nèi)存中,當(dāng)下次請(qǐng)求同一文件時(shí),直接使用緩沖區(qū)已編譯的代碼去執(zhí)行從而提高速度。這就是PHP二進(jìn)制代碼緩存(opcodecache)的概念。此外,某些需
5、要反復(fù)讀取的變量,比如,從數(shù)據(jù)庫(kù)檢索出瀏覽次數(shù)最多新聞在首頁(yè)面中顯示,傳統(tǒng)的做法是每請(qǐng)求一次首頁(yè)面,首頁(yè)面執(zhí)行一次數(shù)據(jù)庫(kù)操作,取出當(dāng)前瀏覽次數(shù)最多新聞,并在頁(yè)面中顯示出來(lái)。即頁(yè)面每被訪問(wèn)一次,相同的數(shù)據(jù)庫(kù)查詢就會(huì)執(zhí)行一次。這樣做,雖然可以實(shí)現(xiàn)實(shí)時(shí)性,但當(dāng)首頁(yè)訪問(wèn)量比較大時(shí),服務(wù)器的負(fù)載會(huì)非常嚴(yán)重。這時(shí),可以對(duì)這種變量進(jìn)行緩存,并設(shè)定一個(gè)緩存過(guò)期的期限,沒(méi)有超過(guò)這個(gè)期限時(shí),數(shù)據(jù)直接從緩存中讀取,超過(guò)這個(gè)期限時(shí),數(shù)據(jù)從數(shù)據(jù)庫(kù)中獲取,再重新寫入到緩存。這就是變量緩存的概念。-1-http://www.paper.edu.cn3.PHP緩存的主
6、要分類從上面的描述中可以看出,PHP緩存主要分為二進(jìn)制代碼緩存和變量緩存,二進(jìn)制代碼緩存,即opcodecache,是通過(guò)把解釋性的腳本語(yǔ)言預(yù)編譯為二進(jìn)制狀態(tài)并寫入內(nèi)存中,下次執(zhí)行時(shí)可略過(guò)編譯步驟,直接從內(nèi)存中執(zhí)行相關(guān)代碼,提高代碼自身的執(zhí)行效率。變量緩存則是把變量在一定期限內(nèi)緩存進(jìn)某種緩存介質(zhì)中去,這種緩存介質(zhì)可以是內(nèi)存,磁盤。當(dāng)前開源的提供二進(jìn)制預(yù)編譯緩存功能的緩存器有eaccelerator,xcache,apc。提供以內(nèi)存為緩存介質(zhì)的變量緩存的緩存器有eaccelerator、xcache、memcached、apc,這其中,同
7、時(shí)又支持分布式應(yīng)用緩存的,即可以把緩存介質(zhì)部署在支持物理分離的多臺(tái)服務(wù)器,只有memcached。下面就這幾種緩存器逐一進(jìn)行分析和對(duì)比。4.幾種主流開源PHP緩存的簡(jiǎn)要介紹4.1eaccelerator4.1.1基本介紹eaccelerator(以下簡(jiǎn)稱為eacc),是一個(gè)開源的opcode緩存器/優(yōu)化器,誕生于2004年12月。它是TurckMMCache項(xiàng)目的延伸,可以對(duì)整個(gè)頁(yè)面,或者一段執(zhí)行代碼,甚至只是一個(gè)變量進(jìn)行緩存。目前支持PHP4.X,PHP5.X,兼容ZendOptimizer,不支持分布式的內(nèi)容緩存。4.1.2安裝說(shuō)明
8、下載eaccelerator-0.9.5.1.tar.bz2#tar-zxvfeaccelerator-0.9.5.1.tar.bz2//解壓縮安裝包#cdeaccelerator-0.9.5.1//進(jìn)入安