(PECL memcache >= 2.0.0)
Memcache::addServer — 向連接池中添加一個(gè)memcache服務(wù)器
$host
,$port
= 11211,$persistent
= ?,$weight
= ?,$timeout
= ?,$retry_interval
= ?,$status
= ?,$failure_callback
= ?,$timeoutms
= ?Memcache::addServer()增加一個(gè)服務(wù)器到連接池中。通過(guò)Memcache::addServer() 打開(kāi)的連接將會(huì )在腳本執行結束后自動(dòng)關(guān)閉,也可以使用Memcache::close()進(jìn)行手動(dòng)關(guān)閉。 您也可以使用memcache_add_server()來(lái)添加服務(wù)器。
當使用這個(gè)方法的時(shí)候(與Memcache::connect()和Memcache::pconnect()相反) 網(wǎng)絡(luò )連接并不會(huì )立刻建立,而是直到真正使用的時(shí)候才建立。 因此在加入大量服務(wù)器到連接池中時(shí)也是沒(méi)有開(kāi)銷(xiāo)的,因為它們可能并不會(huì )被使用。
故障轉移可能在方法的任何一個(gè)層次發(fā)生,通常只要其他服務(wù)器可用用戶(hù)就不會(huì )感受到。任何的socket或memcache服務(wù)器級別的錯誤 (比如內存溢出)都可能導致故障轉移。而一般的客戶(hù)端錯誤比如使用Memcache::add嘗試增加一個(gè)已經(jīng)存在的key則不會(huì )導致故障轉移。
注意:
這個(gè)方法在2.0.0版本加入Memcache。
host
要連接的memcached服務(wù)端監聽(tīng)的主機位置。這個(gè)參數通常指定其他類(lèi)型的傳輸比如Unix域套接字使用
unix:///path/to/memcached.sock
,這種情況下參數port
必須設置為0
。
port
要連接的memcached服務(wù)端監聽(tīng)的端口。當使用UNIX域套接字連接時(shí)設置為0
。
persistent
控制是否使用持久化連接。默認true
。
weight
為此服務(wù)器創(chuàng )建的桶的數量,用來(lái)控制此服務(wù)器被選中的權重,單個(gè)服務(wù)器被選中的概率是相對于所有服務(wù)器weight總和而言的。
timeout
連接持續(超時(shí))時(shí)間(單位秒),默認值1秒,修改此值之前請三思,過(guò)長(cháng)的連接持續時(shí)間可能會(huì )導致失去所有的緩存優(yōu)勢。
retry_interval
服務(wù)器連接失敗時(shí)重試的間隔時(shí)間,默認值15秒。如果此參數設置為-1表示不重試。此參數和persistent
參數在擴展以
dl()函數動(dòng)態(tài)加載的時(shí)候無(wú)效。
每個(gè)失敗的連接結構有自己的超時(shí)時(shí)間,并且在它失效之前選擇后端服務(wù)請求時(shí)該結構會(huì )被跳過(guò)。一旦一個(gè)連接失效,
它將會(huì )被成功重新連接或被標記為失敗連接以在下一個(gè)retry_interval
秒重連。
典型的影響是每個(gè)web服務(wù)子進(jìn)程在服務(wù)于一個(gè)頁(yè)面時(shí)將會(huì )每retry_interval
秒
嘗試重新連接一次。
status
控制此服務(wù)器是否可以被標記為在線(xiàn)狀態(tài)。設置此參數值為false
并且retry_interval
參數
設置為-1時(shí)允許將失敗的服務(wù)器保留在一個(gè)池中以免影響key的分配算法。對于這個(gè)服務(wù)器的請求會(huì )進(jìn)行故障轉移或者立即失敗,
這受限于memcache.allow_failover
參數的設置。該參數默認true
,表明允許進(jìn)行故障轉移。
failure_callback
允許用戶(hù)指定一個(gè)運行時(shí)發(fā)生錯誤后的回調函數?;卣{函數會(huì )在故障轉移之前運行?;卣{函數會(huì )接受到兩個(gè)參數,分別是失敗主機的 主機名和端口號。
timeoutms
成功時(shí)返回 true
, 或者在失敗時(shí)返回 false
。
示例 #1 Memcache::addServer() 示例
<?php
/* OO API */
$memcache = new Memcache;
$memcache->addServer('memcache_host', 11211);
$memcache->addServer('memcache_host2', 11211);
/* procedural API */
$memcache_obj = memcache_connect('memcache_host', 11211);
memcache_add_server($memcache_obj, 'memcache_host2', 11211);
?>