Memcached 是高性能分佈式內存緩存系統,ThinkPHP 通過驅動方式無縫接入。本文梳理 Windows/Linux 環境下的安裝、配置、驅動部署、測試驗證全流程,避開常見坑點。
memcached.exe (64位) 至 D:\memcached\。D:\memcached\memcached.exe -d install。D:\memcached\memcached.exe -d start(默認端口 11211)。telnet 127.0.0.1 11211 → 輸入 stats 返回統計信息即成功。# CentOS/RHEL yum install -y memcached systemctl enable memcached --now # Ubuntu/Debian apt-get update && apt-get install -y memcached systemctl enable memcached --now # 配置內存/端口:編輯 /etc/sysconfig/memcached (CentOS) 或 /etc/memcached.conf (Ubuntu) # 重啟生效:systemctl restart memcached
注意區分:
memcache (舊擴展,無 'd'):功能較簡單,ThinkPHP 早期驅動基於此。memcached (新擴展,有 'd'):基于 libmemcached,功能豐富(一致性哈希、二進制協議、SASL),推薦新項目使用。ThinkPHP 3.x 內置驅動 CacheMemcache.class.php 基於 memcache 擴展。若使用 memcached 擴展,需自行編寫驅動或使用 ThinkPHP 5/6/8 內置支持。
php_memcache.dllphp_memcache.dll(如 PHP 7.4 VC15 x64 TS)。php/ext/ 目錄。php.ini 添加 extension=php_memcache.dll。phpinfo() 搜索 "memcache" 確認加載成功。# 基於 memcache 擴展 (ThinkPHP 3.x 需求) pecl install memcache echo "extension=memcache.so" >> /etc/php.d/memcache.ini # 或基於 memcached 擴展 (推薦) pecl install memcached echo "extension=memcached.so" >> /etc/php.d/memcached.ini systemctl restart php-fpm
編輯 Application/Common/Conf/config.php(或模塊配置):
<?php
return array(
'DATA_CACHE_TYPE' => 'Memcache', // 關鍵:啟用 Memcache 驅動
'MEMCACHE_HOST' => '127.0.0.1', // 可選,默認 127.0.0.1
'MEMCACHE_PORT' => 11211, // 可選,默認 11211
'MEMCACHE_TIMEOUT'=> 1, // 連接超時(秒)
'MEMCACHE_PERSISTENT' => false, // 是否持久連接
);
?>
框架默認未包含 Memcache 驅動文件,需手動獲取:
ThinkPHP_Extend。Extend/Driver/Cache/CacheMemcache.class.php 到 ThinkPHP/Library/Think/Driver/Cache/CacheMemcache.class.php。Application/Common/Driver/Cache/CacheMemcache.class.php(優先加載)。<?php
// 控制器任意操作中測試
S('test_key', 'Memcache Works!', 60); // 寫入緩存,有效期 60 秒
$value = S('test_key'); // 讀取緩存
echo $value; // 輸出:Memcache Works!
// 進階:直接操作 Memcache 對象
$mem = S(''); // 獲取緩存驅動實例
$mem->set('key2', ['a' => 1, 'b' => 2], 0, 300);
var_dump($mem->get('key2'));
// 清除緩存
S('test_key', null); // 刪除單個
// 或
$mem->flush(); // 清空所有(謹慎使用)
?>
| 現象 | 可能原因 | 解決方案 |
|---|---|---|
| S() 讀寫無報錯但無效果 | 驅動文件未放對位置 / 類名不匹配 | 確認 CacheMemcache.class.php 在 Think/Driver/Cache/ 或 Common/Driver/Cache/,類名 CacheMemcache |
| 提示 "Memcache not supported" | PHP 未安裝 memcache 擴展 | php -m | grep memcache 確認,未安裝則按上文安裝 |
| 連接超時 / 無法連接 | Memcached 服務未啟動 / 端口防火牆 / 配置 IP 錯誤 | telnet IP PORT 測通,檢查 MEMCACHE_HOST/PORT 配置 |
| 數據類型異常 (對象變數組) | Memcache 只存字符串,ThinkPHP 驅動自動 serialize/unserialize | 確保存儲的對象可序列化,避免資源類型、Closure 等 |