PHP緩存篇:字節(jié)碼緩存和對(duì)象緩存
PHP自身效率很高,但是執(zhí)行創(chuàng)建遠(yuǎn)程連接、加載文件等操作時(shí)容易出現(xiàn)瓶頸,幸運(yùn)的是,我們有很多工具來加速這部分操作,或減少 這些耗時(shí)操作的執(zhí)行次數(shù)。
字節(jié)碼緩存在一個(gè)PHP文件被執(zhí)行時(shí),它先被編譯為字節(jié)碼(也稱opcode),然后這些字節(jié)碼被執(zhí)行。如果文件沒有修改,那么字節(jié)碼也會(huì)保持不變, 這意味著編譯這一步白白浪費(fèi)了CPU資源。
這就是引入字節(jié)碼緩存的原因,通過把字節(jié)碼保存在內(nèi)存中來消除冗余的編譯,重用它們完成后續(xù)的調(diào)用。配置字節(jié)碼緩存非常簡單, 而且可以極大地提高應(yīng)用的執(zhí)行效率,沒有理由不使用字節(jié)碼緩存。
流行的字節(jié)碼緩存方案有:
APCXCacheZend Optimizer+?(part of Zend Server package)WinCache?(extension for MS Windows Server)對(duì)象緩存很多時(shí)候,在代碼中緩存對(duì)象可以帶來很大的收益,例如獲取代價(jià)很大的數(shù)據(jù)和查詢結(jié)果很少變化的數(shù)據(jù)庫調(diào)用。我們可以使用對(duì)象緩存系統(tǒng)緩存這些數(shù)據(jù),大大加快后續(xù)的同類訪問請(qǐng)求。如果你在取得這些數(shù)據(jù)之后,把它們緩存在系統(tǒng)中,在后續(xù)對(duì)這些數(shù)據(jù)的請(qǐng)求 中,就可以直接使用緩存中的對(duì)象,這么做可以很大的提示系統(tǒng)性能,減少服務(wù)器的負(fù)載。
很多流行的字節(jié)碼緩存方案也允許你緩存自定義數(shù)據(jù),因此我們更應(yīng)該充分利用對(duì)象緩存功能。APC、XCache和WinCache都提供API, 讓你把數(shù)據(jù)緩存在他們的內(nèi)存cache中。
使用最多的內(nèi)存對(duì)象緩存系統(tǒng)是APC和memcached,APC是很好的一個(gè)對(duì)象緩存方案,它提供了簡單的API來讓你把對(duì)象存儲(chǔ)在內(nèi)存中,而且 配置和使用都非常容易,它的一個(gè)缺點(diǎn)是只能在本機(jī)使用。Memcached則是另外一種方式,它是一個(gè)單獨(dú)的服務(wù),可以通過網(wǎng)絡(luò)訪問,這意味著可以在一個(gè)地方寫入數(shù)據(jù),然后在不同的系統(tǒng)中訪問這份數(shù)據(jù)。
在單機(jī)性能上,APC通常比Memcached更高,如果你不需要多臺(tái)服務(wù)器或者其他Memcached的高級(jí)功能,APC可能是你的最佳選擇。
APC的示例:
<?php// check if there is data saved as ’expensive_data’ in cache$data = apc_fetch(’expensive_data’);if ($data === false) { // data is not in cache; save result of expensive call for later use apc_add(’expensive_data’, $data = get_expensive_data());}print_r($data);
學(xué)習(xí)更多對(duì)象緩存系統(tǒng):
APC FunctionsMemcachedRedisXCache APIsWinCache Functions相關(guān)文章:
1. Intellij IDEA 2019 最新亂碼問題及解決必殺技(必看篇)2. 利用django創(chuàng)建一個(gè)簡易的博客網(wǎng)站的示例3. PHP5.0正式發(fā)布 不完全兼容PHP4 新增多項(xiàng)功能4. JS+css3實(shí)現(xiàn)幻燈片輪播圖5. ASP.NET MVC獲取多級(jí)類別組合下的產(chǎn)品6. 未來的J2EE主流應(yīng)用框架:對(duì)比Spring和EJB37. Android自定義View實(shí)現(xiàn)掃描效果8. 《javascript設(shè)計(jì)模式》學(xué)習(xí)筆記三:Javascript面向?qū)ο蟪绦蛟O(shè)計(jì)單例模式原理與實(shí)現(xiàn)方法分析9. JS繪圖Flot如何實(shí)現(xiàn)動(dòng)態(tài)可刷新曲線圖10. 關(guān)于HTML5的img標(biāo)簽
