Memcached::getMulti

(PECL memcached >= 0.1.0)

Memcached::getMultiLit plusieurs éléments

Description

public mixed Memcached::getMulti ( array $keys [, array &$cas_tokens [, int $flags ]] )

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. Si la variable cas_tokens est fournie, elle contiendra les CAS de chaque valeur trouvée.

Note:

Contrairement à Memcached::get(), il n'est pas possible de spécifier une fonction de rappel en cas d'absence pour la fonction Memcached::getMulti(), car le protocole de memcache ne fournit pas d'information sur les clés qui n'ont pas été trouvée.

Le paramètre flags sert à spécifier des options supplémentaires pour Memcached::getMulti(). Actuellement, la seule option disponible est Memcached::GET_PRESERVE_ORDER qui garantit que les clés sont retournées dans le même ordre que celui de leur requête.

Liste de paramètres

keys

Un tableau de clé à lire.

cas_tokens

La variable où stocker les CAS des éléments trouvés.

flags

Les options pour cette opération.

Valeurs de retour

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

Exemples

Exemple #1 Exemple avec Memcached::getMulti()

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

L'exemple ci-dessus va afficher quelque chose de similaire à :

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

Exemple #2 Exemple avec Memcached::GET_PRESERVE_ORDER

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

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

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

L'exemple ci-dessus va afficher quelque chose de similaire à :

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

Voir aussi

add a note add a note

User Contributed Notes 1 note

up
0
gabriel dot maybrun at demandmedia dot com
3 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