Memcached::addServer
(PECL memcached >= 0.1.0)
Memcached::addServer — Add a server to the server pool
Description
$host
, int $port
[, int $weight
= 0
] )
Memcached::addServer() adds the specified server to the
server pool. No connection is established to the server at this time, but
if you are using consistent key distribution option (via
Memcached::DISTRIBUTION_CONSISTENT
or
Memcached::OPT_LIBKETAMA_COMPATIBLE
), some of the
internal data structures will have to be updated. Thus, if you need to add
multiple servers, it is better to use
Memcached::addServers() as the update then happens
only once.
The same server may appear multiple times in the server pool, because no
duplication checks are made. This is not advisable; instead, use the
weight
option to increase the selection weighting of
this server.
Parameters
-
host
-
The hostname of the memcache server. If the hostname is invalid, data-related operations will set
Memcached::RES_HOST_LOOKUP_FAILURE
result code. -
port
-
The port on which memcache is running. Usually, this is 11211.
-
weight
-
The weight of the server relative to the total weight of all the servers in the pool. This controls the probability of the server being selected for operations. This is used only with consistent distribution option and usually corresponds to the amount of memory available to memcache on that server.
Return Values
Returns TRUE
on success or FALSE
on failure.
Examples
Example #1 Memcached::addServer() example
<?php
$m = new Memcached();
/* Add 2 servers, so that the second one
is twice as likely to be selected. */
$m->addServer('mem1.domain.com', 11211, 33);
$m->addServer('mem2.domain.com', 11211, 67);
?>
See Also
- Memcached::addServers() - Add multiple servers to the server pool
- Memcached::resetServerList() - Clears all servers from the server list
- Функция Memcached::add() - Add an item under a new key
- Функция Memcached::addByKey() - Add an item under a new key on a specific server
- Функция Memcached::addServer() - Add a server to the server pool
- Функция Memcached::addServers() - Add multiple servers to the server pool
- Функция Memcached::append() - Append data to an existing item
- Функция Memcached::appendByKey() - Append data to an existing item on a specific server
- Функция Memcached::cas() - Compare and swap an item
- Функция Memcached::casByKey() - Compare and swap an item on a specific server
- Функция Memcached::__construct() - Create a Memcached instance
- Функция Memcached::decrement() - Decrement numeric item's value
- Функция Memcached::decrementByKey() - Decrement numeric item's value, stored on a specific server
- Функция Memcached::delete() - Delete an item
- Функция Memcached::deleteByKey() - Delete an item from a specific server
- Функция Memcached::deleteMulti() - Delete multiple items
- Функция Memcached::deleteMultiByKey() - Delete multiple items from a specific server
- Функция Memcached::fetch() - Fetch the next result
- Функция Memcached::fetchAll() - Fetch all the remaining results
- Функция Memcached::flush() - Invalidate all items in the cache
- Функция Memcached::get() - Retrieve an item
- Функция Memcached::getAllKeys() - Gets the keys stored on all the servers
- Функция Memcached::getByKey() - Retrieve an item from a specific server
- Функция Memcached::getDelayed() - Request multiple items
- Функция Memcached::getDelayedByKey() - Request multiple items from a specific server
- Функция Memcached::getMulti() - Retrieve multiple items
- Функция Memcached::getMultiByKey() - Retrieve multiple items from a specific server
- Функция Memcached::getOption() - Retrieve a Memcached option value
- Функция Memcached::getResultCode() - Return the result code of the last operation
- Функция Memcached::getResultMessage() - Return the message describing the result of the last operation
- Функция Memcached::getServerByKey() - Map a key to a server
- Функция Memcached::getServerList() - Get the list of the servers in the pool
- Функция Memcached::getStats() - Get server pool statistics
- Функция Memcached::getVersion() - Get server pool version info
- Функция Memcached::increment() - Increment numeric item's value
- Функция Memcached::incrementByKey() - Increment numeric item's value, stored on a specific server
- Функция Memcached::isPersistent() - Check if a persitent connection to memcache is being used
- Функция Memcached::isPristine() - Check if the instance was recently created
- Функция Memcached::prepend() - Prepend data to an existing item
- Функция Memcached::prependByKey() - Prepend data to an existing item on a specific server
- Функция Memcached::quit() - Close any open connections
- Функция Memcached::replace() - Replace the item under an existing key
- Функция Memcached::replaceByKey() - Replace the item under an existing key on a specific server
- Функция Memcached::resetServerList() - Clears all servers from the server list
- Функция Memcached::set() - Store an item
- Функция Memcached::setByKey() - Store an item on a specific server
- Функция Memcached::setMulti() - Store multiple items
- Функция Memcached::setMultiByKey() - Store multiple items on a specific server
- Функция Memcached::setOption() - Set a Memcached option
- Функция Memcached::setOptions() - Set Memcached options
- Функция Memcached::setSaslAuthData() - Set the credentials to use for authentication
- Функция Memcached::touch() - Set a new expiration on an item
- Функция Memcached::touchByKey() - Set a new expiration on an item on a specific server
Коментарии
On my Debian Squeeze system I was getting WRITE FAILURE errors. After debugging and finally tcpdump it seems that the problem was me adding the server 'localhost', which resolved to '::1' (ipv6) while the default memcached server on debian only listens to '127.0.0.1' (ipv4). DNS automatically prefers ipv6 over ipv4.
I added the server '127.0.0.1' instead and everything worked. You could also disable ipv6 or have memcached listen on ::1
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. Specially when using FastCGI.
Example:
<?php
class Cache {
private $id;
private $obj;
function __construct($id){
$this->id = $id;
$this->obj = new Memcached($id);
}
public function connect($host , $port){
$servers = $this->obj->getServerList();
if(is_array($servers)) {
foreach ($servers as $server)
if($server['host'] == $host and $server['port'] == $port)
return true;
}
return $this->obj->addServer($host , $port);
}
}
?>
As of version 2.0.0b1 you can use Unix socket.
<?php
$m = new Memcached();
$m->addServer('/path/to/socket',0);
?>
Not to be confused with Memcache that use 'unix:///path/to/socket'