Memcached::getMulti

(PECL memcached >= 0.1.0)

Memcached::getMultiRetrieve multiple items

Описание

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

Memcached::getMulti() is similar to Memcached::get(), but instead of a single key item, it retrieves multiple items the keys of which are specified in the keys array. If cas_tokens variable is provided, it is filled with the CAS token values for the found items.

Замечание:

Unlike Memcached::get() it is not possible to specify a read-through cache callback for Memcached::getMulti(), because the memcache protocol does not provide information on which keys were not found in the multi-key request.

The flags parameter can be used to specify additional options for Memcached::getMulti(). Currently, the only available option is Memcached::GET_PRESERVE_ORDER that ensures that the keys are returned in the same order as they were requested in.

Список параметров

keys

Array of keys to retrieve.

cas_tokens

The variable to store the CAS tokens for the found items.

flags

The flags for the get operation.

Возвращаемые значения

Returns the array of found items или FALSE в случае возникновения ошибки. Используйте при необходимости Memcached::getResultCode().

Примеры

Пример #1 Memcached::getMulti() example

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

Результатом выполнения данного примера будет что-то подобное:

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

Пример #2 Memcached::GET_PRESERVE_ORDER example

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

Результатом выполнения данного примера будет что-то подобное:

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

Смотрите также

Коментарии

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'));
    }
}
2014-09-05 02:58:03
http://php5.kiev.ua/manual/ru/memcached.getmulti.html

    Поддержать сайт на родительском проекте КГБ