為了正確的故障轉移機制
$memcached = new Memcached();
$memcached->setOption(Memcached::OPT_CONNECT_TIMEOUT, 10);
$memcached->setOption(Memcached::OPT_DISTRIBUTION, Memcached::DISTRIBUTION_CONSISTENT);
$memcached->setOption(Memcached::OPT_SERVER_FAILURE_LIMIT, 2);
$memcached->setOption(Memcached::OPT_REMOVE_FAILED_SERVERS, true);
$memcached->setOption(Memcached::OPT_RETRY_TIMEOUT, 1);
$memcached->addServers($servers);
Memcached::OPT_DISTRIBUTION:將其設定為一致性雜湊。如果一個 memcached 節點失效,它的鍵(且只有它的鍵)將會平均分配到其他節點。這就是神奇之處。這與在 ->addServers() 呼叫中移除一個伺服器真的不同。
Memcached::OPT_SERVER_FAILURE_LIMIT:在伺服器被標記為失效並從伺服器列表中移除之前的連線問題次數(預設值:5)。
Memcached::OPT_REMOVE_FAILED_SERVERS:將其設定為「true」,以啟用移除失效伺服器的功能。
Memcached::OPT_RETRY_TIMEOUT:在節點被宣告失效後,libmemcached 將在這麼多秒後再次嘗試連線。這裡我將其設定為 1 秒,但我正在處理大多數時間執行不到 100 毫秒的 PHP 腳本。這只對 cron/daemonize 腳本有用。
Memcached::OPT_CONNECT_TIMEOUT:判斷伺服器失效的逾時時間。由於我的伺服器都在同一個區域網路中,ping 值約為 0.5 毫秒,因此 10 毫秒足以判斷伺服器已失效。需要注意的是,在節點被標記為失效之前,您必須等待兩倍的設定時間。因此,如果設定為 1000 毫秒,您的腳本將會鎖定 2 秒才會忽略失效的伺服器。這可能會大幅影響您的響應時間,這就是為什麼我將它設定得很低。
此說明由 Dugwood 的 Yvan 提供