php使用apc爲include大文件數組提速

前言
最近在重寫某系統, 有個地方須要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與include速度比較
apc與include速度比較

最後 框架

代碼很簡單,簡單的將apc當作memcached來 使用,相比include時間要縮短2倍左右,最慢的狀況下時間也縮短一倍. 下回測試redis存儲大數組須要多少時間. 本文不是告訴你們非要使用apc、使用apc讀寫大數組不必定是最好的方法,可是這個方法或許你們的工做能夠用上,這邊拋出的僅僅是一個思路,望你們能夠 用上. 運維

來源站點:運維生存時間  網址:http://www.ttlsa.com/html/2847.html

相關文章
相關標籤/搜索