Преобразование типов в memcached

Мемкэш жжот просто нипадецки. Протестируем один сценарий для трёх расширений PHP:

  1. Старенький php_memcache.dll на моей локалке под Windows
  2. Тот же php_memcache только под FreeBSD
  3. Новое расширение php_memcached

$memcached = false; // php_memcached or php_memcache
 
if ($memcached) {
    $c = new Memcached();
} else {
    $c = new Memcache();
}
$c->addServer('localhost', 11211);
 
function check($label, $value)
{
    global $c;
    echo $label.': ';
    $c->set('x', $value);
    var_dump($c->get('x'));
    echo '<hr />';
}
 
if (!$memcached) {
    echo 'Version: '.$c->getversion().'<hr />';
}
 
check('false', false);
check ('true', true);
check('null', null);
check('empty string', '');
check('string "0"', '0');
check('0', 0);
check('1', 1);
check('array', array(1, 2, 3));
 
$c->delete('x');
echo 'delete: ';
var_dump($c->get('x'));
if ($memcached) {
    echo '<br />resultCode = '.$c->getResultCode();
}

Результаты:

  Домашний memcache Серверный memcache php_memcached
version: 1.2.1 1.2.8 нет метода
false: "" FALSE NULL
true: "1" TRUE TRUE
null: NULL NULL NULL
Пустая строка: "" "" NULL
Строка "0": Строка "0" Строка "0" Строка "0"
Число 0: Строка "0" Число 0 Число 0
Число 1: Строка "1" Число 1 Число 1
Массив: нормально нормально нормально
Несуществующий
ключ:
FALSE FALSE FALSE
code=RES_NOTFOUND

Массивы сериализуются и с ними проблем нет. А вот со скалярными величинами всё не так просто.

Мой старый php_memcache все скалярные величины приводит к строке. Не слишком приятно, но удволетворительно и понятно.
Из общей картины несколько выбивается NULL — он сохраняет свой тип.

Более новая версия php_memcache сохраняет типы правильно. Но в ней теперь нельзя точно узнать, существует ли ключ или же с ним связано значение FALSE.

А вот php_memcached начинает отжигать. В нём наконец появилась возможность проверить существует ли ключ, если get вернула FALSE (с помощью getResultCode()). Но в ней теперь нет необходимости: FALSE теперь возвращает NULL. Более того, NULL так же возвращает и пустая строка.

Вот и разбери их теперь.

4 комментария »

Leave a comment