首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 相關知識

ThinkPHP 整合 Memcached 緩存全流程:從安裝到驗證的標準化指南

     編輯:PHP 相關知識

ThinkPHP 整合 Memcached 緩存全流程:從安裝到驗證的標準化指南

Memcached 是高性能分佈式內存緩存系統,ThinkPHP 通過驅動方式無縫接入。本文梳理 Windows/Linux 環境下的安裝、配置、驅動部署、測試驗證全流程,避開常見坑點。

一、Memcached 服務端安裝與啟動

Windows 環境

  1. 下載 memcached.exe (64位) 至 D:\memcached\。
  2. 管理員 CMD 註冊服務:D:\memcached\memcached.exe -d install。
  3. 啟動服務:D:\memcached\memcached.exe -d start(默認端口 11211)。
  4. 驗證:telnet 127.0.0.1 11211 → 輸入 stats 返回統計信息即成功。

Linux 環境 (CentOS/Ubuntu)

# 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

二、PHP 安裝 Memcache 擴展

注意區分:

  • memcache (舊擴展,無 'd'):功能較簡單,ThinkPHP 早期驅動基於此。
  • memcached (新擴展,有 'd'):基于 libmemcached,功能豐富(一致性哈希、二進制協議、SASL),推薦新項目使用。

ThinkPHP 3.x 內置驅動 CacheMemcache.class.php 基於 memcache 擴展。若使用 memcached 擴展,需自行編寫驅動或使用 ThinkPHP 5/6/8 內置支持。

Windows PHP 安裝 php_memcache.dll

  1. 下載匹配 PHP 版本、VC 版本、TS/NTS 的 php_memcache.dll(如 PHP 7.4 VC15 x64 TS)。
  2. 放入 php/ext/ 目錄。
  3. php.ini 添加 extension=php_memcache.dll。
  4. 重啟 Web 服務,phpinfo() 搜索 "memcache" 確認加載成功。

Linux PHP 安裝

# 基於 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

三、ThinkPHP 配置啟用 Memcache 緩存

1. 修改緩存類型配置

編輯 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,   // 是否持久連接
);
?>

2. 部署驅動文件 (ThinkPHP 3.1/3.2)

框架默認未包含 Memcache 驅動文件,需手動獲取:

  1. 下載 ThinkPHP 官方擴展包 ThinkPHP_Extend。
  2. 複製 Extend/Driver/Cache/CacheMemcache.class.php 到 ThinkPHP/Library/Think/Driver/Cache/CacheMemcache.class.php。
  3. 或放在項目層: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(); // 清空所有(謹慎使用)
?>

五、常見問題排查

六、生產環境優化建議

  • 多台 Memcached 叢集:配置 'MEMCACHE_HOST' => '192.168.1.10:11211, 192.168.1.11:11211'(驅動需支持多服務器,ThinkPHP 3.x 驅動可能需修改源碼支持,建議升級 ThinkPHP 5+ 或使用一致性哈希代理如 Twemproxy)。
  • 鍵名前綴隔離:配置 'DATA_CACHE_PREFIX' => 'proj_' 防多項目鍵衝突。
  • 監控指標:關注 get_hits / (get_hits + get_misses) 命中率、bytes 內存使用、evictions 驅逐數。
  • Session 存儲:'SESSION_TYPE' => 'Memcache' 實現分佈式 Session 共享。

按此標準化流程操作,ThinkPHP + Memcached 緩存層可在 30 分鐘內從零部署到生產可用,顯著降低數據庫壓力,提升響應速度。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved
現象可能原因解決方案
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 等