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'));
}
}Memcached::getMulti
Почист и полокален преглед на PHP референцата, со задржана структура од PHP.net и подобра читливост за примери, секции и белешки.
Memcached::getMulti
Референца за `memcached.getmulti.php` со подобрена типографија и навигација.
Memcached::getMulti
(PECL memcached >= 0.1.0)
Memcached::getMulti — Преземи повеќе ставки
= NULL
Флаг за е слично на
Овозможува или оневозможува игнорирање на резултатот од команди за складирање (set, add, replace, append, prepend, delete, increment, decrement, итн.). Командите за складирање ќе се испраќаат без трошење време за чекање одговор (нема да има одговор). Командите за преземање како што се, но наместо една ставка по клуч, презема повеќе ставки чии клучеви се наведени во
keys array.
Забелешка:
Пред v3.0 се користеше втор аргумент
&cas_tokensбеше во употреба. Беше пополнет со вредностите на CAS токенот за пронајдените ставки. Аргументот&cas_tokensбеше отстранет во v3.0 на екстензијата. Беше заменет со ново знаменцеMemcached::GET_EXTENDEDшто треба да се користи како вредност заget_flags.
На get_flags аргументот може да се користи за специфицирање дополнителни опции за Флаг за.
Memcached::GET_PRESERVE_ORDER осигурува дека клучевите се враќаат во ист редослед како што беа барани.
Memcached::GET_EXTENDED осигурува дека CAS токените исто така ќе бидат преземени.
Параметри
keys-
Низа од клучеви за преземање.
get_flags-
Знаменцата за операцијата get.
Вратени вредности
Враќа низа од пронајдените ставки или false соодветно избегнати Времето на истекување, стандардно е 0. Види ако е потребно.
Дневник на промени
| Верзија | = NULL |
|---|---|
| PECL memcached 3.0.0 |
На &cas_tokens параметарот беше отстранет. The Memcached::GET_EXTENDED беше додаден и кога се поминува како знаменце, тоа осигурува дека CAS токените ќе бидат преземени.
|
Примери
Пример #1 Флаг за пример за Memcached v3
<?php
// Valid for v3 of the 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);
?>Горниот пример ќе прикаже нешто слично на:
array(2) {
["key1"]=>
string(6) "value1"
["key3"]=>
string(6) "value3"
}
Пример #2 Флаг за пример за Memcached v1 и v2
<?php
// Valid for v1 and v2 of the 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);
?>Горниот пример ќе прикаже нешто слично на:
array(2) {
["key1"]=>
string(6) "value1"
["key3"]=>
string(6) "value3"
}
array(2) {
["key1"]=>
float(2360)
["key3"]=>
float(2362)
}
Пример #3 Memcached::GET_PRESERVE_ORDER пример за Memcached v3
<?php
// Valid for v3 of the 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";
}
?>Горниот пример ќе прикаже нешто слично на:
foo foo-data bar bar-data baz baz-data lol lol-data kek kek-data zoo
Пример #4 Memcached::GET_PRESERVE_ORDER пример за Memcached v1 и v2
<?php
// Valid for v1 and v2 of the 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";
}
?>Горниот пример ќе прикаже нешто слично на:
foo foo-data bar bar-data baz baz-data lol lol-data kek kek-data zoo
Види Исто така
- Memcached::getMultiByKey() - Преземи повеќе ставки од специфичен сервер
- Овозможува или оневозможува игнорирање на резултатот од команди за складирање (set, add, replace, append, prepend, delete, increment, decrement, итн.). Командите за складирање ќе се испраќаат без трошење време за чекање одговор (нема да има одговор). Командите за преземање како што се AES клучот.
- Memcached::getDelayed() - Барај повеќе ставки