標籤:boa 分享 tool time cos title idt fill 測試
apc緩衝使用者資料這個會用, apc_store() 和apc_fetch()函數。
那apc 緩衝php 代碼,這個怎麼用呢?
原文: http://blog.csdn.net/w18704622664/article/details/47132061#
------------------------------------------------------------------------------------------------
APC簡介
APC的全稱為Alternative PHP Cache, 是一款開源的php外掛程式,用來對php的代碼或者使用者資料進行緩衝。
APC 對php代碼的緩衝
apc可以去掉php動態解析以及編譯的時間,php指令碼可以執行的更快。下面這張圖很好的說明了為什麼了apc可以讓php指令碼運行得更快。
PHP是一個動態指令碼語言,所以為了讓使用者在瀏覽器中看到頁面內容,伺服器必須解析php代碼從而產生想用的html代碼。從上面的圖中可以看出,在沒有apc的時候,使用者對php頁面的每一次請求,伺服器都需要進行對php進行解析,編譯以及執行,但是很多時候,只要php代碼沒有發生更改,php的執行邏輯就不會改變,也就是說解析以及編譯的過程就可以省略,直接執行然後將結果返回即可。這就是apc的工作,apc緩衝php的可執行代碼,從而去掉瞭解析以及編譯的過程,加快了php指令碼的執行速度。
APC 對使用者資料的緩衝以及
除了緩衝php代碼外,apc還可以進行使用者資料的緩衝,但是由於apc的容量很少,所以緩衝的資料最好是那些很長時間都不變的資料,不變的單位應該以天位單位。所以如果資料是變化很頻繁的並且資料量也比較大,那麼就不要使用apc了,可以使用memcache或者Redis。
下面是一個apc和redis的對比測試實驗,看一下apc和redis的效率對比。
[php] view plain copy
- function getTimeStamp() {
- $timestr = microtime();
- $timestrary = explode(‘ ‘, $timestr);
- $result = intval($timestrary[1])*1000 + intval(floatval($timestrary[0])*1000);
- return $result;
- }
- $redis = new Redis();
- $redis->connect(‘127.0.0.1‘, 6379);
- $key = ‘key‘;
- $value =‘value‘;
- $redis->set($key, $value);
-
- apc_store($key, $value, 1);
-
- $begin = getTimeStamp();
- for($i = 0 ; $i < 100000 ; $i = $i +1) {
- $result = apc_fetch($key);
- }
- $cost = getTimeStamp() - $begin;
- var_dump($cost);
- $begin = getTimeStamp();
- for($i = 0 ; $i < 100000 ; $i = $i +1) {
- $result = $redis->get($key);
- }
- $cost = getTimeStamp() - $begin;
- var_dump($cost);
- $redis->close();
-
都是簡單的取資料操作,分別進行10萬次,單位是毫秒。最後的運行結果redis10萬次讀在4-5秒之間,而apc得10萬次讀只有50毫秒左右。可以看到如果是簡單的緩衝一些資料,並且這些資料不會變化且命中的話,apc還是能帶來一定的效率提升的。
安裝apc時會有一個apc.php的頁面可以通過這個頁面查看apc的命中。如
APC的配置
配置的例子如下:
[php] view plain copy
- extension= apc.so
- apc.enabled=1
- apc.shm_segments=1
- apc.shm_size=64M ; apc記憶體的大小,最後的大小需要乘上segments的數量,所以這裡一共為apc分配64M
- apc.ttl=7200
- apc.user_ttl=7200
- apc.enable_cli=1 ; 這個如果不開啟,則只可以在網頁上進行apc操作,不能通過cli進行apc操作
php apc緩衝以及與redis的對比