For a proper FailOver mechanism:
$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: set it to consistent hashing. If one memcached node is dead, its keys (and only its keys) will be evenly distributed to other nodes. This is where the magic is done. This is really different from removing one server in your ->addServers() call.
Memcached::OPT_SERVER_FAILURE_LIMIT: number of connection issues before a server is marked as DEAD, and removed from the list of servers (default: 5).
Memcached::OPT_REMOVE_FAILED_SERVERS: set it to «true», to enable the removal of dead servers.
Memcached::OPT_RETRY_TIMEOUT: after a node is declared DEAD, libmemcached will try it again after that many seconds. Here I've set it to 1 second, but I'm working on PHP scripts that run for less than 100ms most of the time. That would only be useful for cron/daemonize scripts.
Memcached::OPT_CONNECT_TIMEOUT: the timeout after which a server is considered DEAD. As my servers are on the same LAN, ping is ~0.5ms, so 10ms is large enough to consider the server is DEAD. Note that you have to wait twice that time before a node is marked DEAD, so if it's 1000ms, your script will lock for 2 seconds before ignoring the DEAD server. That may affect your response times a lot, and that's why I've set it very low
Author of this is Yvan from DugwoodMemcached::addServers
Почист и полокален преглед на PHP референцата, со задржана структура од PHP.net и подобра читливост за примери, секции и белешки.
Memcached::addServers
Референца за `memcached.addservers.php` со подобрена типографија и навигација.
Memcached::addServers
(PECL memcached >= 0.1.1)
Memcached::addServers — (PECL memcached >= 0.1.1)
= NULL
Додај повеќе сервери во групата на сервери adds
servers Memcached::addServers()
servers во групата на сервери. Секој запис во
треба да биде низа која содржи име на хост, порта и, опционално, тежина на серверот. Во овој момент не се воспоставува врска со серверите.
weight Истиот сервер може да се појави повеќе пати во групата на сервери, бидејќи не се вршат проверки за дупликати. Ова не се препорачува; наместо тоа, користете ја опцијата
Параметри
array-
за зголемување на тежината на изборот на овој сервер.
Вратени вредности
Патеката до PHP скриптата што треба да се провери. true на успех или false при неуспех.
Примери
Пример #1 Додај повеќе сервери во групата на сервери example
<?php
$m = new Memcached();
$servers = array(
array('mem1.domain.com', 11211, 33),
array('mem2.domain.com', 11211, 67)
);
$m->addServers($servers);
?>Види Исто така
- Низа од сервери за додавање во групата. - Додај сервер во групата на сервери
- Memcached::addServer() Memcached::resetServerList()
Белешки од корисници 2 забелешки
See the note for __construct()
Important to not call ->addServers() every run -- only call it if no servers exist (check getServerList() ); otherwise, since addServers() does not check for dups, it will let you add the same server again and again and again, resultings in hundreds if not thousands of connections to the MC daemon.