php apc快取以及與redis的對比
阿新 • • 發佈:2019-02-04
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的效率對比。
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的配置
配置的例子如下:
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操作