Memcached 是高效能分散式記憶體快取系統,廣泛用於緩解資料庫壓力、Session 共享、頁面片段快取。本文詳細記錄 Windows 環境下 Memcached 服務端安裝、PHP 擴展配置、驗證與常見問題排查,支援 PHP 5.3 至 8.x。
[PHP 應用] --(TCP 11211)--> [Memcached 服務端] --(記憶體 Hash 表)--> [Key-Value 儲存]
memcached-1.6.x-windows.zip(含 memcached.exe、pthreadVC2.dll、libevent.dll)# 解壓至 C:\memcached
# 以管理員身分開啟 CMD / PowerShell
cd C:\memcached
# 安裝為 Windows 服務
memcached.exe -d install
# 啟動服務
memcached.exe -d start
# 驗證執行狀態
memcached.exe -p 11211 -u administrator -l 127.0.0.1 -m 64 -c 1024 -v
常見錯誤:缺少 MSVCP140.dll / VCRUNTIME140.dll → 安裝 Visual C++ Redistributable 2015-2022。
# 停止
memcached.exe -d stop
# 移除服務
memcached.exe -d uninstall
# 查看執行程序
tasklist | findstr memcached
關鍵參數三要素:
下載來源:
# 1. 解壓取得 php_memcached.dll
# 2. 複製到 PHP 擴展目錄
copy php_memcached.dll C:\php\ext\
# 3. 複製相依 DLL 到 PHP 根目錄(或 System32)
# libmemcached.dll, libsasl.dll, libhashkit.dll 等
copy *.dll C:\php\
# 4. 編輯 php.ini
[memcached]
extension=memcached
# 選用:Session 處理器
session.save_handler = memcached
session.save_path = "127.0.0.1:11211"
# 5. 重啟 Web 伺服器 / PHP-FPM
# Apache: httpd -k restart
# Nginx + PHP-FPM: net stop php-fpm && net start php-fpm
; 容錯移轉
memcached.allow_failover = 1
memcached.max_failover_attempts = 20
; 壓縮閾值(大於此大小啟用壓縮)
memcached.compress_threshold = 2000
memcached.compress_type = "zlib"
memcached.compress_factor = 1.3
; 序列化器
memcached.serializer = "igbinary" ; 或 php, json
; 一致性雜湊(叢集擴容不重新分發)
memcached.hash_strategy = "consistent"
memcached.hash_function = "crc32"
建立 info.php:
<?php phpinfo(); ?>
搜尋 memcached 區塊,確認版本、libmemcached 版本、Session 支援。
<?php
$m = new Memcached();
$m->addServer('127.0.0.1', 11211);
// 基本 Set/Get
$m->set('test_key', 'Hello Memcached!', 60);
echo $m->get('test_key') . PHP_EOL;
// 多鍵操作
$m->setMulti(['a' => 1, 'b' => 2, 'c' => 3]);
print_r($m->getMulti(['a', 'b', 'c']));
// 計數器
$m->set('counter', 0);
$m->increment('counter');
$m->increment('counter', 5);
echo "Counter: " . $m->get('counter') . PHP_EOL;
// Session 測試
session_start();
$_SESSION['test'] = 'session in memcached';
echo "Session ID: " . session_id();
| 現象 | 可能原因 | 解決方案 |
|---|---|---|
| Class 'Memcached' not found | DLL 未載入 / 版本不符 | 核對 PHP 版本、TS/NTS、VC 編譯器;檢查 php.ini extension=memcached |
| 無法連線 127.0.0.1:11211 | 服務未啟動 / 防火牆阻擋 | net start memcached;Windows 防火牆開放 11211 埠 |
| Session 寫入失敗 | save_path 格式錯誤 / 權限 | 格式:"host:port",多節點用逗號分隔 |
| 資料莫名消失 | 記憶體不足觸發 LRU 淘汰 | 啟動參數 -m 256 設定 256MB;監控 stats |
| PHP 8.1/8.2 報 Deprecated 警告 | 舊版 memcached 擴展不相容 | 升級至 memcached 3.2.0+ (PECL) |
get_hits、get_misses、evictions、bytes、curr_connections完成上述步驟,你的 Windows PHP 環境即具備生產級 Memcached 快取能力。建議配合 php-memcached-admin 視覺化管理介面進行日常監控。