Memcached::getMulti

(PECL memcached >= 0.1.0)

Memcached::getMultiПолучает несколько записей

Описание

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

Memcached::getMulti() работает аналогично методу Memcached::get(), но вместо одной записи получает несколько, ключи которых были переданы в массиве keys. Если передана переменная cas_tokens, то она будет заполнена CAS токенами найденных записей.

Замечание:

В отличие от Memcached::get() нельзя указать callback-функцию с чтением из кеша для метода Memcached::getMulti(), потому что memcache протокол не дает информацию о том, какие ключи небыли найдены в множественном запросе.

Параметр flags может использоваться для указания дополнительных настроек для метода Memcached::getMulti(). На данный момент поддерживаются, только следующие настройки: Memcached::GET_PRESERVE_ORDER гарантирует что записи будут возвращены в том же порядке, что и были запрошены.

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

keys

Массив ключей для запроса.

cas_tokens

Переменная в которую будут записаны CAS токены найденных записей.

flags

Флаги для операции получения записей.

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

Возвращает массив найденных записей или FALSE в случае возникновения ошибки. Используйте при необходимости Memcached::getResultCode().

Примеры

Пример #1 Пример использования 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);
?>

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

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

Пример #2 Пример использования 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";
}
?>

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

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

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