APC(Alternative PHP Cache)是一個開源的 PHP 擴展,提供操作碼緩存與用戶數據緩存兩大功能,能顯著提升 PHP 應用性能。
APC 將 PHP 腳本編譯後的操作碼存入共享內存,避免重複編譯。默認緩存 3600 秒(1 小時),可通過 apc.ttl=0 設置為永不過期(需重啟 Web 服務器使代碼更新生效)。
通過 apc_store()、apc_fetch() 等函數操作,適合緩存較小、讀多寫少的數據(如配置信息、會話數據)。大數據量場景建議使用 Memcached/Redis。
zend_inline_hash_func)生成哈希值。apc.stat 設置:
On:基於文件的 device + inode 生成,文件修改自動重新編譯。Off:基於文件絕對路徑生成,性能更高但需手動重啟服務器更新。php_apc.dll,放入 ext 目錄。php.ini 啟用擴展並配置關鍵參數:extension=php_apc.dll
apc.rfc1867 = on
apc.max_file_size = 100M
upload_max_filesize = 100M
post_max_size = 100M
wget https://pecl.php.net/get/APC-3.1.13.tgz
tar -zxvf APC-3.1.13.tgz
cd APC-3.1.13
/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.enabled = 1
apc.shm_segments = 1
apc.shm_size = 128M
apc.ttl = 7200
apc.user_ttl = 7200
apc.gc_ttl = 3600
apc.max_file_size = 10M
apc.stat = 1
apc.write_lock = 1
重啟 PHP-FPM 或 Apache 使配置生效。
| 參數 | 推薦值 | 說明 |
|---|---|---|
| apc.shm_size | 128M~512M | 共享內存大小,根據項目代碼體積與用戶數據量調整 |
| apc.ttl | 0 或 7200 | 系統緩存存活時間,0 為永久(需重啟更新),生產環境建議 7200 秒 |
| apc.user_ttl | 7200 | 用戶緩存存活時間 |
| apc.gc_ttl | 3600 | 垃圾回收間隔 |
| apc.stat | 1 (開發) / 0 (生產) | 是否檢查腳本修改,生產環境關閉可提升性能 |
| apc.write_lock | 1 | 寫入鎖,防止並發寫入衝突 |
| apc.spinlocks | 啟用 | 使用自旋鎖替代互斥鎖,提升高併發下性能 |
APC 自帶 apc.php 管理界面,部署後可查看緩存命中率、內存使用、條目列表等。**務必修改默認管理員賬號密碼**。
APC 曾是 PHP 性能優化的利器,理解其原理與配置對維護老項目仍有重要價值。