Memcached::getServerByKey

(PECL memcached >= 0.1.0)

Memcached::getServerByKeyПолучает информацию о сервере по ключу

Описание

public Memcached::getServerByKey(string $server_key): array|false

Memcached::getServerByKey() возвращает информацию о сервере, который может быть выбран с помощью специального параметра server_key, который используется в Memcached::*ByKey() функциях.

Список параметров

server_key

Ключ, который идентифицирует сервер, на котором хранится значение. Вместо хеширования фактического ключа элемента хешируется ключ сервера, когда решается, с каким сервером memcached взаимодействовать. Это разрешает группировать связанные элементы вместе на одном сервере, что повышает эффективность групповых операций.

Возвращаемые значения

Возвращает массив, содержащий следующие ключи: host, port, и weight в случае успешного выполнения или false, если возникла ошибка. Вызывайте метод Memcached::getResultCode(), если требуется.

Примеры

Пример #1 Пример использования Memcached::getServerByKey()

<?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 notes

up
4
zhaoyong dot lc at gmail dot com
12 years ago
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:  11212key_1:  11211key_2:  11212key_3:  11212key_4:  11212key_5:  11211key_6:  11211key_7:  11212key_8:  11212key_9:  11211
up
1
morphles
9 years ago
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.
To Top