The parameter server_key is very confusing, it's not a server key for MemCached Server, but it's key,in key-value pair which you stored in server.
<?php
$m = new Memcached;
$m->addServers(array(
array('127.0.0.1',11212),
array('127.0.0.1',11211)
));
for($i=0;$i<10;$i++){
$key = 'key_'.$i;
$m->add($key, 1);
}
for($i=0;$i<10;$i++) {
$key = 'key_'.$i;
$arr = $m->getServerByKey($key);
echo ($key.":\t".$arr['port']."\n");
}
?>
key_0: 11212
key_1: 11211
key_2: 11212
key_3: 11212
key_4: 11212
key_5: 11211
key_6: 11211
key_7: 11212
key_8: 11212
key_9: 11211
Memcached::getServerByKey
(PECL memcached >= 0.1.0)
Memcached::getServerByKey — Map a key to a server
Description
$server_key
)
Memcached::getServerByKey() returns the server that
would be selected by a particular server_key in all
the Memcached::*ByKey() operations.
Parameters
-
server_key -
The key identifying the server to store the value on or retrieve it from. Instead of hashing on the actual key for the item, we hash on the server key when deciding which memcached server to talk to. This allows related items to be grouped together on a single server for efficiency with multi operations.
Return Values
Returns an array containing three keys of host,
port, and weight on success or FALSE
on failure.
Use Memcached::getResultCode() if necessary.
Examples
Example #1 Memcached::getServerByKey() example
<?php
$m = new Memcached();
$m->addServers(array(
array('mem1.domain.com', 11211, 40),
array('mem2.domain.com', 11211, 40),
array('mem3.domain.com', 11211, 20),
));
$m->setOption(Memcached::OPT_LIBKETAMA_COMPATIBLE, true);
var_dump($m->getServerByKey('user'));
var_dump($m->getServerByKey('log'));
var_dump($m->getServerByKey('ip'));
?>
The above example will output something similar to:
array(3) {
["host"]=>
string(15) "mem3.domain.com"
["port"]=>
int(11211)
["weight"]=>
int(20)
}
array(3) {
["host"]=>
string(15) "mem2.domain.com"
["port"]=>
int(11211)
["weight"]=>
int(40)
}
array(3) {
["host"]=>
string(15) "mem2.domain.com"
["port"]=>
int(11211)
["weight"]=>
int(40)
}
