Memcached::getServerByKey

(PECL memcached >= 0.1.0)

Memcached::getServerByKeyMap a key to a server

설명

public array Memcached::getServerByKey ( string $server_key )

Memcached::getServerByKey() returns the server that would be selected by a particular server_key in all the Memcached::*ByKey() operations.

인수

server_key

값을 저장하거나 가져올 서버를 인식하는 키. 아이템에 대한 실제 키를 해싱하는 대신에, 대화할 memcached 서버가 정해질 때 서버 키를 해시합니다. 이로써 하나의 서버에 대한 관련된 아이템들을 묶을 수 있게 되고, 여러 명령을 효율적으로 처리하게 됩니다.

반환값

Returns an array containing three keys of host, port, and weight on success or FALSE on failure. 필요할 경우 Memcached::getResultCode() 사용.

예제

Example #1 Memcached::getServerByKey() example

<?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
11 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
8 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