1、APC全稱爲Alternative PHP Cache,是一個開放自由的PHP opcode 緩存。它的目標是提供一個自由、 開放,和健全的框架用於緩存和優化PHP的中間代碼。
2、opcode爲計算機指令中的一部分,先了解下運行機制
首先先從瀏覽器過來,
請求交給SAPI,隨後SAPI層將控制權轉給PHP,
其次zend_language_scanner對代碼進行掃描,對php代碼進行詞法分析轉換成一系列的tokens array,
zend_language_parser將上一步驟產生的一系列tokens處理掉空格等無用的代碼以後轉換成一系列表達式,
最後經過compiler階段生成opcode返回zend_op_array指針。
其實,opcode就是將php編譯爲一系列指令來供計算機執行,而且php的底層就是用c來開發的。
3、apc是將產生的opcode進行緩存之內存或臨時文件中。從而避免相同的程序再次編譯以提高php運行速度。
1、系統緩存
系統緩存是當你安裝之後就開始了自行運行,並將php編譯後產生的opcode緩存起來,當第二次調用時會對比你在php.ini中設置的超時時間是否過期,類似於memcache過期機制。而apc一般在使用上都只做本地cache這層。
2、用戶緩存
由開發人員在開發php時用apc_store和apc_fetch函數操作讀取、寫入,但不支持分佈式,而且apc本身最大的利用價值就在於加速php。如果用apc去緩存用戶數據,還是推薦memcache。畢竟,涉及到緩存這層的架構已經不是小型網站了。而且memcache支持分佈式,使用方便靈活。
./configure --enable-apc --enable-apc-mmap --with-php-config=/usr/local/php/bin/php-config
make && make install
extension=apc.so
apc.enabled = 1
apc.cache_by_default = on
apc.shm_segments = 1
apc.shm_size = 64m
apc.ttl = 7200
apc.user_ttl = 7200
apc.num_files_hint = 0
apc.write_lock = On
這個選項是否啓用腳本更新檢查。 改變這個指令值要非常小心。 默認值 On 表示APC在每次請求腳本時都檢查腳本是否被更新, 如果被更新則自動重新編譯和緩存編譯後的內容。但這樣做對性能有不利影響。 如果設爲 Off 則表示不進行檢查,從而使性能得到大幅提高。 但是爲了使更新的內容生效,你必須重啓Web服務器(譯者注:如果採用cgi/fcgi類似的,需重啓cgi/fcgi進程)。 生產服務器上腳本文件很少更改, 可以通過禁用本選項獲得顯著的性能提升。
這個指令對於include/require的文件同樣有效。但是需要注意的是, 如果你使用的是相對路徑,APC就必須在每一次include/require時都進行檢查以定位文件。 而使用絕對路徑則可以跳過檢查,所以鼓勵你使用絕對路徑進行include/require操作。
extension=apc.so
#加載apc擴展
apc.enabled = 1
#是否啓用APC
apc.cache_by_default = on
#是否默認對所有文件啓用緩衝。 若設爲Off並與以加號開頭的apc.filters指令一起用,則文件僅在匹配過濾器時才被緩存
apc.shm_segments = 1
#爲編譯器緩衝區分配的共享內存塊數量(建議值爲1)。
apc.shm_size = 64
每個共享內存塊的大小(以MB爲單位,建議值爲128~256)。
apc.ttl = 7200
#緩存條目在緩衝區中允許逗留的秒數。0 表示永不超時。建議值爲7200~36000。設爲 0 意味着緩衝區有可能被舊的緩存條目填滿,從而導致無法緩存新條目。
apc.user_ttl = 7200
#類似於apc.ttl,只是針對每個用戶而言,建議值爲7200~36000。
apc.num_files_hint = 0
#Web服務器上可能被包含或被請求的不同源文件的大致數量(建議值爲1024~4096)。如果你不能確定,則設爲 0 ;此設定主要用於擁有數千個源文件的站點。
apc.write_lock = On
#是否啓用寫入鎖。在非常繁忙的服務器上,無論是啓動服務還是修改文件,都可能由於多個進程企圖同時緩存一個文件而導致競爭條件啓用該指令可以避免競爭條件的出現。