?
This document uses PHP Chinese website manual Release
有時(shí)緩存代碼中的單個(gè)對(duì)象會(huì)很有用,比如有些需要很大開(kāi)銷(xiāo)獲取的數(shù)據(jù)或者一些結(jié)果集不怎么變化的數(shù)據(jù)庫(kù)查詢。你可以使用一些緩存軟件將這些數(shù)據(jù)存放在內(nèi)存中以便下次高速獲取。如果你獲得數(shù)據(jù)后把他們存起來(lái),下次請(qǐng)求直接從緩存里面獲取數(shù)據(jù),在減少數(shù)據(jù)庫(kù)負(fù)載的同時(shí)能極大提高性能。
許多流行的字節(jié)碼緩存方案也能緩存定制化的數(shù)據(jù),所以更有理由好好使用它們了。APCu、XCache 以及 WinCache 都提供了 API,以便你將數(shù)據(jù)緩存到內(nèi)存中
最常用的內(nèi)存對(duì)象緩存系統(tǒng)是 APCu 和 Memcached 。APCu 對(duì)于對(duì)象緩存來(lái)說(shuō)是個(gè)很好的選擇,它提供了簡(jiǎn)單的 API 讓你能將數(shù)據(jù)緩存到內(nèi)存,并且很容易設(shè)置和使用。APCu 的局限性表現(xiàn)在它依賴于所在的服務(wù)器。另一方面,Memcached 以獨(dú)立的服務(wù)的形式安裝,可以通過(guò)網(wǎng)絡(luò)交互,這意味著你能將數(shù)據(jù)集中存在一個(gè)高速存取的地方,而且許多不同的系統(tǒng)能從中獲取數(shù)據(jù)。
值得注意的是當(dāng)你以 CGI(FastCGI) 的形式使用 PHP 時(shí),每個(gè)進(jìn)程將會(huì)有各自的緩存,比如說(shuō),APCu 緩存數(shù)據(jù)無(wú)法在多個(gè)工作進(jìn)程中共享。在這種情況下,你可能得考慮 Memcached 了,由于它獨(dú)立于 PHP 進(jìn)程。
通常 APCu 在存取速度上比 Memcached 更快,但是 Memcached 在擴(kuò)展上更有優(yōu)勢(shì)。如果你不希望應(yīng)用程序涉及多個(gè)服務(wù)器,或者不需要 Memcached 提供的其他特性,那么 APCu 可能是最好的選擇。
使用 APCu 的例子:
<?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);
注意在 PHP 5.5 之前,APC 同時(shí)提供了對(duì)象緩存與字節(jié)碼緩存。APCu 是為了將 APC 的對(duì)象緩存移植到 PHP 5.5+ 的一個(gè)項(xiàng)目,因?yàn)楝F(xiàn)在 PHP 有了內(nèi)建的字節(jié)碼緩存方案 (OPcache)。