PHP 7.2.0 Release Candidate 4 Released

Memcached::getServerByKey

(PECL memcached >= 0.1.0)

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

Описание

public array Memcached::getServerByKey ( string $server_key )

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'1121140),
    array(
'mem2.domain.com'1121140),
    array(
'mem3.domain.com'1121120),
));

$m->setOption(Memcached::OPT_LIBKETAMA_COMPATIBLEtrue);

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)
}

add a note add a note

User Contributed Notes 2 notes

up
4
zhaoyong dot lc at gmail dot com
4 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:  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
up
0
morphles
1 year 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