Memcached::getMulti

(PECL memcached >= 0.1.0)

Memcached::getMultiLee varios elementos

Descripción

public Memcached::getMulti(array $keys, int $get_flags = 0): array|false

Memcached::getMulti() es similar al método Memcached::get(), pero en lugar de un solo elemento, puede leer varios elementos especificados por el array keys.

Nota:

Antes de la v3.0, un segundo argumento &cas_tokens era utilizado. Era rellenado con los valores de los tokens CAS para los elementos encontrados. El parámetro &cas_tokens fue eliminado en la v3.0 de la extensión. Fue reemplazado por un nuevo flag Memcached::GET_EXTENDED que debe ser utilizado como valor para get_flags.

El parámetro get_flags sirve para especificar opciones adicionales para Memcached::getMulti(). Memcached::GET_PRESERVE_ORDER garantiza que las claves son devueltas en el mismo orden que el de su solicitud. Memcached::GET_EXTENDED garantiza que los tokens CAS serán también recuperados.

Parámetros

keys

Un array de claves a leer.

get_flags

Las opciones para esta operación.

Valores devueltos

Devuelve un array de elementos leídos o false si ocurre un error. Use Memcached::getResultCode() if necessary.

Historial de cambios

Versión Descripción
PECL memcached 3.0.0 El parámetro &cas_tokens fue eliminado. Memcached::GET_EXTENDED fue añadido y cuando se pasa como flag asegura que los tokens CAS son recuperados.

Ejemplos

Ejemplo #1 Ejemplo de Memcached::getMulti() para Memcached v3

<?php
// Válido para la v3 de la extensión

$m = new Memcached();
$m->addServer('localhost', 11211);

$items = array(
'key1' => 'value1',
'key2' => 'value2',
'key3' => 'value3'
);
$m->setMulti($items);
$result = $m->getMulti(array('key1', 'key3', 'badkey'));
var_dump($result);
?>

Resultado del ejemplo anterior es similar a :

array(2) {
  ["key1"]=>
  string(6) "value1"
  ["key3"]=>
  string(6) "value3"
}

Ejemplo #2 Ejemplo de Memcached::getMulti() para Memcached v1 y v2

<?php
// Válido para la v1 y v2 de la extensión

$m = new Memcached();
$m->addServer('localhost', 11211);

$items = array(
'key1' => 'value1',
'key2' => 'value2',
'key3' => 'value3'
);
$m->setMulti($items);
$result = $m->getMulti(array('key1', 'key3', 'badkey'), $cas);
var_dump($result, $cas);
?>

Resultado del ejemplo anterior es similar a :

array(2) {
  ["key1"]=>
  string(6) "value1"
  ["key3"]=>
  string(6) "value3"
}
array(2) {
  ["key1"]=>
  float(2360)
  ["key3"]=>
  float(2362)
}

Ejemplo #3 Ejemplo de Memcached::GET_PRESERVE_ORDER para Memcached v3

<?php
// Válido para la v3 de la extensión

$m = new Memcached();
$m->addServer('localhost', 11211);

$data = array(
'foo' => 'foo-data',
'bar' => 'bar-data',
'baz' => 'baz-data',
'lol' => 'lol-data',
'kek' => 'kek-data',
);

$m->setMulti($data, 3600);

$keys = array_keys($data);
$keys[] = 'zoo';
$got = $m->getMulti($keys, Memcached::GET_PRESERVE_ORDER);

foreach (
$got as $k => $v) {
echo
"$k $v\n";
}
?>

Resultado del ejemplo anterior es similar a :

foo foo-data
bar bar-data
baz baz-data
lol lol-data
kek kek-data
zoo

Ejemplo #4 Ejemplo de Memcached::GET_PRESERVE_ORDER para Memcached v1 y v2

<?php
// Válido para la v1 y v2 de la extensión

$m = new Memcached();
$m->addServer('localhost', 11211);

$data = array(
'foo' => 'foo-data',
'bar' => 'bar-data',
'baz' => 'baz-data',
'lol' => 'lol-data',
'kek' => 'kek-data',
);

$m->setMulti($data, 3600);

$null = null;
$keys = array_keys($data);
$keys[] = 'zoo';
$got = $m->getMulti($keys, $null, Memcached::GET_PRESERVE_ORDER);

foreach (
$got as $k => $v) {
echo
"$k $v\n";
}
?>

Resultado del ejemplo anterior es similar a :

foo foo-data
bar bar-data
baz baz-data
lol lol-data
kek kek-data
zoo

Ver también

add a note

User Contributed Notes 1 note

up
2
gabriel dot maybrun at demandmedia dot com
10 years ago
GOTCHA: Recently I was tasked with moving from PECL memcache to PECL memcached and ran into a major problem -- memcache and memcached serialize data differently, meaning that data written with one library can't necessarily be read with the other library.

For example, If you write an object or an array with memcache, it's interpreted as an integer by memcached. If you write it with memcached, it's interpreted as a string by memcache.

tl;dr - You can't safely switch between memcache and memcached without a either a cache flush or isolated cache environments.

<?php
$memcache
= new Memcache;
$memcacheD = new Memcached;
$memcache->addServer($host);
$memcacheD->addServers($servers);

$checks = array(
123,
4542.32,
'a string',
true,
array(
123, 'string'),
(object)array(
'key1' => 'value1'),
);
foreach (
$checks as $i => $value) {
print
"Checking WRITE with Memcache\n";
$key = 'cachetest' . $i;
$memcache->set($key, $value);
usleep(100);
$val = $memcache->get($key);
$valD = $memcacheD->get($key);
if (
$val !== $valD) {
print
"Not compatible!";
var_dump(compact('val', 'valD'));
}

print
"Checking WRITE with MemcacheD\n";
$key = 'cachetest' . $i;
$memcacheD->set($key, $value);
usleep(100);
$val = $memcache->get($key);
$valD = $memcacheD->get($key);
if (
$val !== $valD) {
print
"Not compatible!";
var_dump(compact('val', 'valD'));
}
}
To Top