前言
最近在重寫某系統, 有個地方須要include一大數組文件,差很少有1.2M,PHP程序每次跑到這塊代碼都須要從硬盤讀取內容,站點訪問量達了勢必會形成過量的IO. 考慮使用redis,memcache等KV存儲,可是擔憂IO過大形成網絡阻塞。那安裝到本地呢,每臺都須要安裝豈不是太麻煩了.因而以爲嘗試將數組存入本機內存中.eaccelerator與APC二選一,eaccelerator 0.6.5.1以後的版本不支持eaccelerator_put方法,索性直接使用apc,如何安裝以及如何配置APC我就不詳細講解了. 例子很簡單,廢話太多,進入正題. php
簡介
APC全稱Alternative PHP Cache是一個免費開源的php緩存插件,它的目標是提供一個自由,開放和強大的框架用於緩存和優化PHP中間代碼. html
APC配置
php.ini redis
[apc] extension = php_apc.dll apc.enabled = on apc.cache_by_default = off //必定要off,不然全部php都會被cache apc.shm_segments = 2 apc.shm_size = 128M // 單位M或者G,網上不少沒寫,會報錯 apc.ttl = 7200 apc.user_ttl = 7200 apc.num_files_hint = 1024 apc.write_lock = On apc.gc_ttl=3600 apc.ttl=0 apc.max_file_size=2M //最大單個文件大小
APC VS include方法
大文件數組內容:
arrFile.php shell
<?php $arr = array( "aaaa"=>11, "BBBBB"=>11, ....忽略幾萬個 "CCCCC"=>11 )
include文件代碼片斷 數組
<?php include_once 'arrFile.php'; print_r($arr); ?>
APC加速文件代碼片斷 緩存
<?php $arr=apc_fetch('key'); # 讀取apc緩存 $arr=unserialize($arr); ?>
include與apc性能對比
所有代碼以下 bash
<?php /** * 站點:www.ttlsa.com * 做者:涼白開 * QQ羣:3951405 */ # include array file $ti1 = microtime ( true ); include_once 'arrFile.php'; $ti2 = microtime ( true ); $ti3=(($ti2 - $ti1) * 1000); echo "<B>加載文件數組耗時</B>:".$ti3. 'ms<br>'; # apc save $arrSeri=serialize($arr); //將上面include的數組序列化 apc_add("key",$badSeri,300); //序列化後的文件保存到apc緩存中,鍵爲key,過時時間300秒 # 寫入一次便可,後續都直接在內存中獲取. # apc fetch $ta1 = microtime ( true ); $a=apc_fetch('key'); // 從apc中取出內容 $arr=unserialize($a); $ta2 = microtime ( true ); $ta3=(($ta2 - $ta1) * 1000); echo "<B>加載apc數組耗時</B>:".$ta3 . 'ms<br>'; # result 對比結果 echo round(($ti3-$ta3)/$ta3*100,2) .'%'; // APC比include快百分之幾 ?>
測試截圖以下: 網絡
最後 框架
代碼很簡單,簡單的將apc當作memcached來 使用,相比include時間要縮短2倍左右,最慢的狀況下時間也縮短一倍. 下回測試redis存儲大數組須要多少時間. 本文不是告訴你們非要使用apc、使用apc讀寫大數組不必定是最好的方法,可是這個方法或許你們的工做能夠用上,這邊拋出的僅僅是一個思路,望你們能夠 用上. 運維
來源站點:運維生存時間 網址:http://www.ttlsa.com/html/2847.html