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: 11211Memcached::getServerByKey
Почист и полокален преглед на PHP референцата, со задржана структура од PHP.net и подобра читливост за примери, секции и белешки.
Memcached::getServerByKey
Референца за `memcached.getserverbykey.php` со подобрена типографија и навигација.
Memcached::getServerByKey
(PECL memcached >= 0.1.0)
Memcached::getServerByKey — Мапирај клуч на сервер
= NULL
Memcached::getServerByKey() го враќа серверот што би бил избран од страна на одреден server_key во сите Memcached::*ByKey() operations.
Параметри
server_key-
Клучот што го идентификува серверот на кој ќе се складира вредноста или од кој ќе се преземе. Наместо хеширање на вистинскиот клуч за ставката, хешираме на клучот на серверот кога одлучуваме со кој memcached сервер да разговараме. Ова им овозможува на поврзаните ставки да бидат групирани заедно на еден сервер за ефикасност со повеќе операции.
Вратени вредности
Враќа низа што содржи три клуча од host,
portПрепорачаниот начин за избегнување на SQL инјекција е со врзување на сите податоци преку подготвени изрази. Користењето на параметризирани прашања не е доволно за целосно избегнување на SQL инјекција, но тоа е најлесниот и најбезбедниот начин за обезбедување влез во SQL изразите. Сите динамични литерали на податоци во weight на успех или false соодветно избегнати Времето на истекување, стандардно е 0. Види ако е потребно.
Примери
Пример #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'));
?>Горниот пример ќе прикаже нешто слично на:
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)
}
Белешки од корисници 2 забелешки
Just to clarify (as documentation of memcached, even for C lib, frankly is quite lacking), $server_key is hashed using same method as regular keys for values (I checked C source, as again docs......). So you should be able to see where set($key, $value) goes by using getServerByKey($key) with same key. This can be useful if one does not wish to bother with using/has no need to use *ByKey functions, but still want to know which servers are/should be used with regular keys, for implementing fallback or failure reporting.