ThinkPHP 官方提供的 CacheMemcache.class.php 僅支援單台 MemCache 伺服器。本文展示如何修改核心類以支援多台伺服器的分布式部署,並附帶簡易監控腳本。
官方實現僅接受單一 host/port 配置:
if (empty($options)) {
$options = array(
'host' => '127.0.0.1',
'port' => 11211,
'timeout' => false,
'persistent' => false
);
}
$func = $options['persistent'] ? 'pconnect' : 'connect';
$this->handler = new Memcache;
$this->connected = $options['timeout'] === false
? $this->handler->$func($options['host'], $options['port'])
: $this->handler->$func($options['host'], $options['port'], $options['timeout']);
將配置結構改為 servers 陣列,並使用 addServer 逐台連接:
if (empty($options)) {
$options = array(
'timeout' => false,
'persistent' => false,
'servers' => array(
array('ip'=>'127.0.0.1', 'port'=>11211),
array('ip'=>'127.0.0.1', 'port'=>11212),
array('ip'=>'202.116.32.4', 'port'=>11211),
),
);
}
$func = "addServer";
$this->handler = new Memcache;
if ($options['timeout'] === false) {
foreach ($options['servers'] as $server) {
$this->handler->$func($server['ip'], $server['port']);
}
}
作者在本機啟動兩個 MemCache 實例,並編寫簡易監控腳本定期檢查連線狀態,異常時透過 PHPMailer 發送郵件通知管理員。測試結果顯示兩台真實伺服器正常工作,虛假 IP 自然連線失敗,驗證了分布式配置的有效性。
更多 ThinkPHP 技術請參考專題:《ThinkPHP 入門教程》、《ThinkPHP 常用方法總結》、《Smarty 模板入門基礎教程》及《PHP 模板技術總結》。