如何在PHP項(xiàng)目中使用apc模塊-創(chuàng)新互聯(lián)

這篇文章給大家介紹如何在PHP項(xiàng)目中使用apc模塊,內(nèi)容非常詳細(xì),感興趣的小伙伴們可以參考借鑒,希望對(duì)大家能有所幫助。

創(chuàng)新互聯(lián)-專業(yè)網(wǎng)站定制、快速模板網(wǎng)站建設(shè)、高性價(jià)比南岳網(wǎng)站開發(fā)、企業(yè)建站全套包干低至880元,成熟完善的模板庫(kù),直接使用。一站式南岳網(wǎng)站制作公司更省心,省錢,快速模板網(wǎng)站建設(shè)找我們,業(yè)務(wù)覆蓋南岳地區(qū)。費(fèi)用合理售后完善,10多年實(shí)體公司更值得信賴。

1、APC緩存簡(jiǎn)介

APC,全稱是Alternative PHP Cache,官方翻譯叫"可選PHP緩存".它為我們提供了緩存和優(yōu)化PHP的中間代碼的框架。 APC的緩存分兩部分:系統(tǒng)緩存和用戶數(shù)據(jù)緩存。
系統(tǒng)緩存
它是指APC把PHP文件源碼的編譯結(jié)果緩存起來(lái),然后在每次調(diào)用時(shí)先對(duì)比時(shí)間標(biāo)記。如果未過(guò)期,則使用緩存的中間代碼運(yùn)行。默認(rèn)緩存3600s(一小時(shí))。但是這樣仍會(huì)浪費(fèi)大量CPU時(shí)間。因此可以在php.ini中設(shè)置system緩存為永不過(guò)期(apc.ttl=0)。不過(guò)如果這樣設(shè)置,改運(yùn)php代碼后需要重啟WEB服務(wù)器。目前使用較多的是指此類緩存。
用戶數(shù)據(jù)緩存
緩存由用戶在編寫PHP代碼時(shí)用apc_store和apc_fetch函數(shù)操作讀取、寫入的。如果數(shù)據(jù)量不大的話,可以一試。如果數(shù)據(jù)量大,使用類似memcache此類的更加專著的內(nèi)存緩存方案會(huì)更好
緩存key生成規(guī)則
APC的緩存中的每個(gè)slot都會(huì)有一個(gè)key,key是apc_cache_key_t結(jié)構(gòu)體類型,除了key相關(guān)的屬性,關(guān)鍵是h字段的生成。 h字段決定了此元素落于slots數(shù)組的哪一個(gè)位置。對(duì)于用戶緩存和系統(tǒng)緩存,其生成規(guī)則不同。 用戶緩存通過(guò)apc_cache_make_user_key函數(shù)生成key.通過(guò)用戶傳遞進(jìn)來(lái)的key字符串,依賴PHP內(nèi)核中的hash函數(shù)(PHP的hashtable所使用的hash函數(shù):zend_inline_hash_func),生成h值。
系統(tǒng)緩存通過(guò)apc_cache_make_file_key函數(shù)生成key.通過(guò)APC的配置項(xiàng)apc.stat的開關(guān)來(lái)區(qū)別對(duì)待不同的方案。在打開的情況下,即apc.stat= On 時(shí),如果被更新則自動(dòng)重新編譯和緩存編譯后的內(nèi)容。此時(shí)的h值是文件的device和inode相加所得的值。在關(guān)閉的情況下,即apc.stat=off時(shí),當(dāng)文件被修改后,如果要使更新的內(nèi)容生效,則必須重啟Web服務(wù)器。此時(shí)h值是根據(jù)文件的路徑地址生成,并且這里的路徑是絕對(duì)路徑。即使你是使用的相對(duì)路徑,也會(huì)查找PG(include_path)定位文件,以取得絕對(duì)路徑,所以使用絕對(duì)路徑會(huì)跳過(guò)檢查,可以提高代碼的效率。
添加緩存過(guò)程
以用戶緩存為例,apc_add函數(shù)用于給APC緩存中添加內(nèi)容。如果key參數(shù)為字符串中,APC會(huì)根據(jù)此字符串生成key,如果key參數(shù)為數(shù)組,APC會(huì)遍歷整個(gè)數(shù)組,生成key.根據(jù)這些key,APC會(huì)調(diào)用_apc_store將值存儲(chǔ)到緩存中。由于這是用戶緩存,當(dāng)前使用的緩存為apc_user_cache.執(zhí)行寫入操作的是apc_cache_make_user_entry函數(shù),其最終調(diào)用apc_cache_user_insert執(zhí)行遍歷查詢和寫入操作。與此對(duì)應(yīng),系統(tǒng)緩存使用apc_cache_insert執(zhí)行寫入操作,其最終都會(huì)調(diào)用_apc_cache_insert.
不管是用戶緩存還是系統(tǒng)緩存,大體的執(zhí)行過(guò)程類似,步驟如下:
通過(guò)求余操作,定位當(dāng)前key的在slots數(shù)組中的位置: cache->slots[key.h % cache->num_slots];
在定位到slots數(shù)組中的位置后,遍歷當(dāng)前key對(duì)應(yīng)的slot鏈表,如果存在slot的key和要寫入的key匹配或slot過(guò)期,清除當(dāng)前slot.
在最后一個(gè)slot的后面插入新的slot.

2、APC模塊安裝

WINDOWS

第一步:下載php_apc.dll 在/pecl.php.net/package/apc 要與php版本對(duì)應(yīng) 將php_apc.dll放入你的ext目錄

第二步:讓php.ini支持apc擴(kuò)展模塊。 然后打開php.ini 加入:


復(fù)制代碼 代碼如下:


extension=php_apc.dll
apc.rfc1867 = on
apc.max_file_size = 100M
upload_max_filesize = 100M
post_max_size = 100M
//以上參數(shù)可自己定義


第三步:檢查是否支持PHP APC apc_store apc_fetch PHP APC 配置參數(shù) 把相關(guān)的配置放在一起解釋。


復(fù)制代碼 代碼如下:


apc.enabled=1 apc.enabled默認(rèn)值是1,你可設(shè)成0禁用APC.如果你設(shè)置為0的時(shí)候,同樣把extension=apc.so也注釋掉(這樣可以節(jié)約內(nèi)存資源)。一旦啟用了APC功能,則會(huì)緩存Opcodes到共享內(nèi)存。
apc.shm_segments = 1


總結(jié) 1,使用Spinlocks鎖機(jī)制,能夠達(dá)到很好性能。
2,APC提供了apc.php,用于監(jiān)控與管理APC緩存。不要忘記修改管理員名和密碼
3,APC默認(rèn)通過(guò)mmap匿名映射創(chuàng)建共享內(nèi)存,緩存對(duì)象都存放在這塊"大型"的內(nèi)存空間。由APC自行管理該共享內(nèi)存
4,我們需要通過(guò)統(tǒng)計(jì)調(diào)整apc.shm_size、apc.num_files_hints、apc.user_entries_hint的值。直到很好
5,好吧,我承認(rèn)apc.stat = 0 可以獲得更佳的性能。要我做什么都可以接受。
6,PHP預(yù)定義常量,可以使用apc_define_constants()函數(shù)。不過(guò)據(jù)APC開發(fā)者介紹說(shuō)pecl hidef性能更佳,拋異define吧,它是低效的。
7,函數(shù)apc_store(),對(duì)于系統(tǒng)設(shè)置等PHP變量,生命周期是整個(gè)應(yīng)用(從httpd守護(hù)進(jìn)程直到httpd守護(hù)進(jìn)程關(guān)閉),使用APC比Memcached會(huì)更好。必竟不要經(jīng)過(guò)網(wǎng)絡(luò)傳輸協(xié)議tcp.
8,APC不適于通過(guò)函數(shù)apc_store()緩存頻繁變更的用戶數(shù)據(jù),會(huì)出現(xiàn)一些奇異現(xiàn)象。

LIUNX

復(fù)制代碼 代碼如下:


wget pecl.php.net/get/APC-3.1.8.tgz
tar -zxvf APC-3.1.8.tgz cd APC-3.1.8
/usr/local/php/bin/phpize
./configure --enable-apc --enable-mmap --enable-apc-spinlocks --disable-apc-pthreadmutex --with-php-config=/usr/local/php/bin/php-config
make
sudo make install
在/usr/local/php/etc/php.ini 加入
extension = "apc.so" ;
;APC setting
apc.enabled = 1
apc.shm_segments = 1
apc.shm_size = 64M
apc.optimization = 1
apc.num_files_hint = 0
apc.ttl = 0
apc.gc_ttl = 3600
apc.cache_by_default = on


重啟apache 或者 /usr/local/php/sbin/php-fpm restart


關(guān)于如何在PHP項(xiàng)目中使用apc模塊就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,可以學(xué)到更多知識(shí)。如果覺(jué)得文章不錯(cuò),可以把它分享出去讓更多的人看到。

網(wǎng)站欄目:如何在PHP項(xiàng)目中使用apc模塊-創(chuàng)新互聯(lián)
URL分享:http://muchs.cn/article12/cossgc.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站維護(hù)、域名注冊(cè)、商城網(wǎng)站、網(wǎng)站策劃、企業(yè)建站、營(yíng)銷型網(wǎng)站建設(shè)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

搜索引擎優(yōu)化