PHP 8.3.4 Released!

Memcached::getMulti

(PECL memcached >= 0.1.0)

Memcached::getMultiRecupera vários itens

Descrição

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

Memcached::getMulti() é semelhante a Memcached::get(), mas em vez de um único item de key, ele recupera vários itens cujas keys são especificadas no array keys.

Nota:

Antes da versão 3.0, um segundo argumento &cas_tokens estava em uso. Ele foi preenchido com os valores de token CAS para os itens encontrados. O parâmetro &cas_tokens foi removido na v3.0 da extensão. Ele foi substituído por uma nova flag Memcached::GET_EXTENDED que precisa ser usado como valor para get_flags.

O parâmetro get_flags pode ser usado para especificar opções adicionais para Memcached::getMulti(). Memcached::GET_PRESERVE_ORDER garante que as keys sejam retornadas na mesma ordem em que foram solicitadas. Memcached::GET_EXTENDED garante que os tokens CAS também sejam buscados.

Parâmetros

keys

Array de keys a ser recuperado.

get_flags

As flags para a operação get.

Valor Retornado

Retorna o array de itens encontrados ou false em caso de falha. Use Memcached::getResultCode() se necessário.

Registro de Alterações

Versão Descrição
PECL memcached 3.0.0 O parâmetro &cas_tokens foi removido. O Memcached::GET_EXTENDEDfoi adicionado e quando passado como flag garante que os tokens CAS sejam buscados.

Exemplos

Exemplo #1 Memcached::getMulti() exemplo para Memcached v3

<?php
// Válido para v3 da extensão

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

O exemplo acima produzirá algo semelhante a:

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

Exemplo #2 Memcached::getMulti() exemplo para Memcached v1 e v2

<?php
// Válido para v1 e v2 da extensão

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

O exemplo acima produzirá algo semelhante a:

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

Exemplo #3 Memcached::GET_PRESERVE_ORDER exemplo para Memcached v3

<?php
// Válido para v3 da extensão

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

O exemplo acima produzirá algo semelhante a:

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

Exemplo #4 Memcached::GET_PRESERVE_ORDER exemplo para Memcached v1 e v2

<?php
// Válido para v1 e v2 da extensão

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

O exemplo acima produzirá algo semelhante a:

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

Veja Também

add a note

User Contributed Notes 1 note

up
1
gabriel dot maybrun at demandmedia dot com
9 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