PHP緩存之模塊緩存(APC)

jopen 10年前發布 | 12K 次閱讀 PHP緩存 PHP開發

    APC是Alternative PHP Cache的簡稱,是 PHP 的一個免費公開的優化代碼緩存。它用來提供免費,公開并且強健的架構來緩存和優化 PHP 的中間代碼。

1、PHP配置APC

開啟APC模塊,需要將    extension=php_apc.dll     前面的注釋去掉即可。
APC模塊的配置參數如下:

apc.enabled 

        類型:布爾型 
apc.enabled 可以被設成 0 來禁用 APC。這主要是有用的,當 APC 被靜態編譯入 PHP 時,因為沒有其它方法來禁用它(當編譯為 DSO 的時候,可以將 php.ini 中的 extension 行注釋掉)。

apc.shm_segments

        類型: 整型 
對編譯緩存分配共享內存塊的數量。如果APC用光了共享內存,而且你已經設置 apc.shm_size為系統允許的最大值的情況下,你可以試著去提高這個參數的值。

apc.shm_size 

        類型:整型 
每個共享內存塊的大小是以MB為單位的。在默認情況下,一些系統(包括大多數BSD變種系統)的共享內存塊的大小限制的很低。

apc.optimization 

        類型:整型 
優化等級。設為0則禁用優化,越高的值使用越強有力的優化。期待有適度的速度上的改進。這個還是實驗性質的。

apc.num_files_hint

        類型: 整型 
對在你的Web服務器上被包含和請求的不同的源文件的數量的提示。如果你無法確定,設置為0或者省略;這個設置主要可能用于有成千的源文件的站點。

apc.ttl 

        類型:整型 
當一個緩存條目在緩存區的位置被另一個條目需要時,我們需要考慮的是這個緩存條目在緩存區的位置被允許空閑的秒數。將這個參數設置為0意味著你的緩存可能 充滿不新鮮的條目,同時導致新的條目無法被緩存。

apc.gc_ttl 

        類型:整型 
緩存條目在垃圾收集列表中存活的秒數。這個值提供了出錯保護在執行一個緩存源文件,而同時服務器進程死了的事件中。如果那個源文件被修改,內存分配給舊版 本的緩存條目將不會被回收,直到這個參數設定的TTL值到的時候。設置為0就是禁止這個特性。

apc.cache_by_default 

        類型:布爾型 
默認為On,但可以被設置為Off并和以加號開頭的apc.filters配合使用,文件僅僅在匹配過濾器時才被緩存。

apc.filters 

        類型:字符串 
一個以逗號分割的POSIX擴展正則表達式的列表。如果任何模式匹配源文件名,這個文件將不會被緩存。注意用來匹配的文件名是傳遞給 include/require 的文件名,而不是絕對路徑。如果正則表達式的第一個字符是 + ,則這個表達式就意味著任何匹配表達式的文件將會被緩存,如果第一個字符是 - 則任何匹配都不會被緩存。 - 是默認值,所以可以被省略。

apc.mmap_file_mask 

        類型:字符串 
如果使用–enable-mmap(默認啟用)為APC編譯了MMAP支持,這里的值就是傳遞給mmap模塊的mktemp風格的文件掩碼(建議值為”/tmp/apc.XXXXXX”)。該掩碼用于決定內存映射區域是否要被 file-backed或者shared memory backed。對于直接的file-backed內存映射,要設置成”/tmp/apc.XXXXXX”的樣子(恰好6個X)。要使用POSIX風格的 shm_open/mmap就需要設置成”/apc.shm.XXXXXX”的樣子。你還可以設為”/dev/zero”來為匿名映射的內存使用內核的” /dev/zero”接口。不定義此指令則表示強制使用匿名映射。


apc.slam_defense 

        類型:整型 
在非常繁忙的服務器上,無論你啟動服務還是修改文件,你都會導致一種多進程都試圖在同一個時間緩存同一個文件的競爭。這個選項設置了進程跳過試圖去緩存一 個未被緩存的文件的百分比。或者可以把這個想象成一個單獨進程跳過緩存的機率。例如,設置apc.slam_defense為75就意味著進程有75%的 機率不去緩存未被緩存的文件。所以,設置的越高,越能減少緩存的碰撞機率。設置為0則禁用這個特性。

apc.file_update_protection 

        類型:整型 
當你在一個運行著的服務器上修改文件時,你應該執行原子操作。也就是,先寫一個臨時文件,當寫完后再重命名(mv)這個文件到它的最終位置。許多文本編輯 器,cp,tar和其他一些類似程序都不是這樣操作的。這就意味著有機會去訪問和(緩存)文件,當這個文件還在被寫的情況下。 apc.file_update_protection的設置使得緩存標記新文件的延遲。默認值是2,意味著如果發現文件的修改時間距離訪問時間不到2 秒,文件將不會被緩存。訪問寫到一半的文件的不幸用戶將會看到離奇的情況,但至少這種情況不是持續的。如果你確信你經常使用原子操作來更新你的文件,你可 以關閉這個保護通過設置這個參數為0。如果你的系統充滿io操作,并導致更新程序花費超過2秒,你可能需要去增大這個值。

apc.enable-cli 

        類型:整型 
大多是為了測試和調試。為CLI版本的PHP開啟動APC功能。一般來說,你將不會想到為每一個 CLI請求創建,移植和放棄APC的緩存,但對于各種測試情況,這是很容易的為了CLI版本開啟APC。


案例:
 apc.enabled = 1
apc.shm_segments = 1
apc.shm_size = 64
apc.optimization = 0
apc.num_files_hint = 1000
apc.ttl = 0
apc.gc_ttl = 3600
apc.cache_by_default = On
apc.slam_defense = 0
apc.file_update_protection = 2
apc.enable_cli = 0
apc.stat=0

2、APC緩存案例

    <?php  
    class Cache_Driver{  


        //獲取緩存信息  
        public function get($id)  
        {  
           $data = apc_fetch($id);  
           if (!is_array($data))  
           {  
                $data = apc_fetch($id);  
           }  

            return (is_array($data)) ? $data[0] : FALSE;  
        }  
        //設置緩存信息  
        public function set($id, $data, $ttl = 60)  
        {  
            return apc_store($id, array($data, time(), $ttl), $ttl);  
        }  
        //刪除key值對應的緩存  
        public function delete($id)  
        {  
            return apc_delete($id);  
        }  
    }  
    ?>  

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!