Memcached::getMulti

(PECL memcached >= 0.1.0)

Memcached::getMulti — Lit plusieurs Ă©lĂ©ments

Description

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

Memcached::getMulti() est similaire à la méthode Memcached::get(), mais au lieu d'un seul élément, elle sait lire plusieurs éléments spécifiés par le tableau keys.

Note:

Avant v3.0 un deuxiĂšme argument &cas_tokens Ă©tait utilisĂ©. Il Ă©tait rempli avec les valeurs des jetons CAS pour les Ă©lĂ©ments trouvĂ©s. Le paramĂštre &cas_tokens a Ă©tĂ© supprimĂ© dans la v3.0 de l'extension. Il a Ă©tĂ© remplacĂ© par un nouveau drapeau Memcached::GET_EXTENDED qui doit ĂȘtre utilisĂ© comme valeur pour get_flags.

Le paramĂštre get_flags sert Ă  spĂ©cifier des options supplĂ©mentaires pour Memcached::getMulti(). Memcached::GET_PRESERVE_ORDER garantit que les clĂ©s sont retournĂ©es dans le mĂȘme ordre que celui de leur requĂȘte. Memcached::GET_EXTENDED garantit que les jetons CAS seront aussi rĂ©cupĂ©rĂ©s.

Liste de paramĂštres

keys

Un tableau de clés à lire.

get_flags

Les options pour cette opération.

Valeurs de retour

Retourne un tableau d'éléments lus ou false si une erreur survient. Utilisez Memcached::getResultCode() si nécessaire.

Historique

Version Description
PECL memcached 3.0.0 Le paramÚtre &cas_tokens a été supprimé. Memcached::GET_EXTENDED a été ajoutée et quand passé en tant que drapeau il s'assure que les jetons CAS sont récupérés.

Exemples

Exemple #1 Exemple de Memcached::getMulti() pour Memcached v3

<?php
// Valide pour la v3 de l'extension

$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);
?>

Résultat de l'exemple ci-dessus est similaire à :

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

Exemple #2 Exemple de Memcached::getMulti() pour Memcached v1 et v2

<?php
// Valide pour la v1 et v2 de l'extension

$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);
?>

Résultat de l'exemple ci-dessus est similaire à :

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

Exemple #3 Exemple de Memcached::GET_PRESERVE_ORDER pour Memcached v3

<?php
// Valide pour la v3 de l'extension

$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";
}
?>

Résultat de l'exemple ci-dessus est similaire à :

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

Exemple #4 Exemple de Memcached::GET_PRESERVE_ORDER pour Memcached v1 et v2

<?php
// Valide pour la v1 et v2 de l'extension

$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";
}
?>

Résultat de l'exemple ci-dessus est similaire à :

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

Voir aussi

add a note

User Contributed Notes 1 note

up
2
gabriel dot maybrun at demandmedia dot com ¶
11 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'));
    }
}