測試背景
比較同一台伺服器上 APC(Alternative PHP Cache)與 Memcached 的讀寫效能。APC 為本機共享記憶體,Memcached 需經網路協議(即使 localhost 仍有 TCP 開銷)。
測試程式碼核心
$memcachehost = 'localhost';
$memcacheport = 11211;
function microtime_float() {
list($usec, $sec) = explode(" ", microtime());
return (float)$usec + (float)$sec;
}
function runtime($t1) {
return number_format((microtime_float() - $t1) * 1000, 4) . 'ms';
}
// APC 讀寫
$t1 = microtime_float();
$arrs = apc_fetch($key);
echo "APC_read=====" . runtime($t1);
$t1 = microtime_float();
apc_store($key . '_test', $arrs, 30);
echo "APC_write=====" . runtime($t1);
// Memcached 連線、讀寫
$t1 = microtime_float();
$mem = new Memcache;
$mem->connect($memcachehost, $memcacheport);
echo "MEM_connet=====" . runtime($t1);
$t1 = microtime_float();
$arrs = $mem->get($key);
echo "MEM_read=====" . runtime($t1);
$t1 = microtime_float();
$mem->set($key . '_test', $arrs, 0, 30);
echo "MEM_write=====" . runtime($t1);
實測結果(Linux 環境)
| 操作 | 耗時 (ms) |
| APC_read | 0.0520 |
| APC_write | 0.0489 |
| MEM_connect | 0.0501 |
| MEM_read | 0.1030 |
| MEM_write | 0.0801 |
結論分析
- 不計連線時間:APC 讀寫約為 Memcached 的 1/2(快 2 倍)。
- 含連線時間:Memcached 每次請求需建立 TCP 連線,總耗時約為 APC 的 2~3 倍。
- APC 双重優勢:同時提供 Opcode 快取(編譯緩存)與 User Cache(資料緩存),一舉兩得。
架構選型建議
| 場景 | 建議方案 | 理由 |
| 單機、中小型專案 | APC / APCu | 零網路開銷、安裝簡單、雙重功能 |
| 多機分散式、需共享緩存 | Memcached / Redis | 跨伺服器共享、支援叢集、持久化選項 |
| 未來擴充性優先 | 直接上 Redis | 功能豐富(資料結構、發布訂閱、Lua 腳本)、社群活躍 |
補充說明
- 測試使用
microtime_float() 而非 microtime(true),屬筆者早期習慣,實際建議用內建參數。
- Windows 環境結果參考性低(進程模型不同),生產環境以 Linux 為準。
- 跨機房使用 Memcached 必須走內網,公網延遲極高且頻寬雙倍消耗。
- 上一篇文章: PHP GBK 頁面輸出 JSON 格式資料:編碼轉換封裝函數
- 下一篇文章: PHP ob_start() 輸出控制詳解:瀏覽器快取、靜態頁生成、Gzip 壓縮
Copyright ©
程式碼之家 All Rights Reserved