APC的介紹php
The Alternative PHP Cache (APC) is a free and open opcode cache for PHP. Its goal is to provide a free, open, and robust framework for caching and optimizing PHP intermediate code.node
APC官方網站:http://www.php.net/manual/en/book.apc.php正則表達式
WIN下最新版本的下載地址:http://downloads.php.net/pierre/ apache
下載鏈接:http://downloads.php.net/pierre/php_apc-3.1.4-5.3-VC6-x86.zip 根據本身的PHP編譯版本使用相對應的DLL數組
apc.cache_by_default | 默認啓用緩存。1表示「啓用」,0表示「禁用」 |
apc.filters | 根據逗號分隔的POSIX正則表達式判斷文件須要緩存仍是不須要緩存。以a+開頭的正則 表達式將強制APC不緩存與此正則表達式匹配的任何文件。以a-開頭的正則表達式將強制 APC緩存與此正則表達式匹配的任何文件 |
apc.stat | 啓用或禁用APC對於全部請求PHP腳本是否有更改的檢查。每次調用腳本時均會執行此 過程。若是禁用該設置,在對PHP腳本進行任意更改後均須要從新啓動WEB服務器以 清除緩存並更改腳本內容。0=禁用,1=啓用,默認1 |
apc.enabled | 啓用或禁用APC緩存。0=禁用,1=啓用,默認1 |
apc.shm_size | 設置APC容許使用的共享內存大小,此值以兆字節爲單位 |
apc.shm_segments | 設置可用的共享內存段總數 |
apc.include_once_override | 啓用或禁用include_once和require_once的優化。啓用該設置時,可減小PHP內部函數進行的額外系統調用。0=禁用,1=啓用,默認0 |
apc.optimization | 設置優化級別。0=禁用優化功能 |
apc.num_files_hint | 設置你認爲須要緩存的文件數。默認值1000,若是不肯定文件數,能夠設置0 |
apc.ttl | 設置文件存儲在緩存中的過時時間,以秒爲單位。 |
apc.write_lock | 開啓該設置將強制單個進程緩存特定的腳步。適用於必須緩存多個文件的大流量WEB服務器或應用程序 |
不論是用戶緩存仍是系統緩存,大致的執行過程相似,步驟以下:緩存
第一步:下載php_apc.dll 在http://pecl.php.net/package/apc 要與php版本對應 將php_apc.dll放入你的ext目錄php框架
第二步:讓php.ini支持apc擴展模塊。 而後打開php.ini 加入:服務器
extension=php_apc.dll網絡
apc.rfc1867 = on框架
apc.max_file_size = 100M
upload_max_filesize = 100M
post_max_size = 100M
//以上參數可本身定義
第三步:檢查是否支持PHP APC apc_store apc_fetch PHP APC 配置參數 把相關的配置放在一塊兒解釋。
apc.enabled=1 apc.enabled默認值是1,你可設成0禁用APC。若是你設置爲0的時候,一樣把extension=apc.so也註釋掉(這樣能夠節約內存資源)。一旦啓用了APC功能,則會緩存Opcodes到共享內存。
apc.shm_segments = 1
總結 1,使用Spinlocks鎖機制,可以達到最佳性能。
2,APC提供了apc.php,用於監控與管理APC緩存。不要忘記修改管理員名和密碼
3,APC默認經過mmap匿名映射建立共享內存,緩存對象都存放在這塊」大型」的內存空間。由APC自行管理該共享內存
4,咱們須要經過統計調整apc.shm_size、apc.num_files_hints、apc.user_entries_hint的值。直到最佳
5,好吧,我認可apc.stat = 0 能夠得到更佳的性能。要我作什麼均可以接受.
6,PHP預約義常量,可使用apc_define_constants()函數。不過據APC開發者介紹說pecl hidef性能更佳,拋異define吧,它是低效的。
7,函數apc_store(),對於系統設置等PHP變量,生命週期是整個應用(從httpd守護進程直到httpd守護進程關閉),使用APC比Memcached會更好。必竟不要通過網絡傳輸協議tcp。
8,APC不適於經過函數apc_store()緩存頻繁變動的用戶數據,會出現一些奇異現象。
wget http://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
查看phpinfo apc
下面引用www.initphp.com 框架的APC緩存類<?php if (!defined('IS_INITPHP')) exit('Access Denied!'); /********************************************************************************* * InitPHP 2.0 國產PHP開發框架 Dao-APC緩存 不適合頻繁寫入的緩存數據 *------------------------------------------------------------------------------- * 版權全部: CopyRight By initphp.com * 您能夠自由使用該源碼,可是在使用過程當中,請保留做者信息。尊重他人勞動成果就是尊重本身 *------------------------------------------------------------------------------- * $Author:zhuli * $Dtime:2011-10-09 ***********************************************************************************/ class apcInit { /** * Apc緩存-設置緩存 * 設置緩存key,value和緩存時間 * @param string $key KEY值 * @param string $value 值 * @param string $time 緩存時間 */ public function set_cache($key, $value, $time = 0) { if ($time == 0) $time = null; //null狀況下永久緩存 return apc_store($key, $value, $time);; } /** * Apc緩存-獲取緩存 * 經過KEY獲取緩存數據 * @param string $key KEY值 */ public function get_cache($key) { return apc_fetch($key); } /** * Apc緩存-清除一個緩存 * 從memcache中刪除一條緩存 * @param string $key KEY值 */ public function clear($key) { return apc_delete($key); } /** * Apc緩存-清空全部緩存 * 不建議使用該功能 * @return */ public function clear_all() { apc_clear_cache('user'); //清除用戶緩存 return apc_clear_cache(); //清楚緩存 } /** * 檢查APC緩存是否存在 * @param string $key KEY值 */ public function exists($key) { return apc_exists($key); } /** * 字段自增-用於記數 * @param string $key KEY值 * @param int $step 新增的step值 */ public function inc($key, $step) { return apc_inc($key, (int) $step); } /** * 字段自減-用於記數 * @param string $key KEY值 * @param int $step 新增的step值 */ public function dec($key, $step) { return apc_dec($key, (int) $step); } /** * 返回APC緩存信息 */ public function info() { return apc_cache_info(); } }