PHP 8.4.2 Released!

Memcached::getServerByKey

(PECL memcached >= 0.1.0)

Memcached::getServerByKeyHacer corresponder una clave con un servidor

Descripción

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

Memcached::getServerByKey() devuelve el servidor que será seleccionado por una clave dada por server_key en particular para todas las operaciones Memcached::*ByKey().

Parámetros

server_key

La clave que identifica al servidor donde guardar o recuperar el valor. En lugar de realizar un hash en la clave real para el ítem, se realiza en la clave del servidor cuando se decide con qué servidor de memcached conversar. Esto permite que los ítems relacionados sean agrupados en un único servidor para una mayor eficacia con operaciones múltiples.

Valores devueltos

Devuelve un array que contiene tres claves: host, port, y weight en caso de éxito, o false en case de error. Emplee Memcached::getResultCode() si fuera necesario.

Ejemplos

Ejemplo #1 Ejemplo de Memcached::getServerByKey()

<?php
$m
= new Memcached();
$m->addServers(array(
array(
'mem1.dominio.com', 11211, 40),
array(
'mem2.dominio.com', 11211, 40),
array(
'mem3.dominio.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'));
?>

El resultado del ejemplo sería algo similar a:

array(3) {
  ["host"]=>
  string(16) "mem3.dominio.com"
  ["port"]=>
  int(11211)
  ["weight"]=>
  int(20)
}
array(3) {
  ["host"]=>
  string(16) "mem2.dominio.com"
  ["port"]=>
  int(11211)
  ["weight"]=>
  int(40)
}
array(3) {
  ["host"]=>
  string(16) "mem2.dominio.com"
  ["port"]=>
  int(11211)
  ["weight"]=>
  int(40)
}

add a note

User Contributed Notes 2 notes

up
5
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
1
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