Ошибка протокола Predis: неверная длина массива

Я использую predis, и все было отлично, пока я не начал получать эту ошибку:

ERR Protocol error: invalid bulk length

Я не уверен, почему я получаю это. Ошибка в этом файле: Predis/Network/StreamConnection.php в этом методе:

public function writeCommand(ICommand $command) {
    $commandId = $command->getId();
    $arguments = $command->getArguments();

    $cmdlen = strlen($commandId);
    $reqlen = count($arguments) + 1;

    $buffer = "*{$reqlen}\r\n\${$cmdlen}\r\n{$commandId}\r\n";
    for ($i = 0; $i < $reqlen - 1; $i++) {
        $argument = $arguments[$i];
        $arglen  = strlen($argument);
        $buffer .= "\${$arglen}\r\n{$argument}\r\n";
    }
    $this->writeBytes($buffer);
}

Он терпит неудачу, когда пытается выполнить strlen() для массива.

Вот код, из-за которого это не работает:

$ids = array(1, 2, 3);
$predis = new Predis\Client();

$predis->set('testerKey', $ids);

Мне не разрешено устанавливать массив? Конечно, я могу установить массив. Единственное, что я изменил, это то, что я сделал свои файлы UTF-8, так что, может быть, это что-то напортачило?

Любая помощь будет оценена по достоинству.


person gprime    schedule 19.07.2011    source источник


Ответы (2)


Я нашел проблему и решение. Исходя из memcached, где он автоматически сериализует массив, это не то же самое в PRedis. PRedis никогда не будет сериализовать что-либо при выполнении установки или получения.

https://github.com/nrk/predis/issues/29

person gprime    schedule 21.07.2011

Вы должны использовать mset.

С помощью команды set Predis ищет массив всего с 2 переменными (для установки ключа => хеш). Установите 3 ключа, вы должны использовать mset.

Чтобы сделать то, что вы, кажется, пытаетесь сделать:

$ids = array(1 => 'id-1', 2 => 'id-2', 3 => 'id-3');
$predis = new Predis\Client();

$predis->mset('testerKey', $ids);
person Colum    schedule 20.07.2011
comment
нет, я не хочу делать мультисет. Я хочу сохранить этот массив в одном ключе. Вероятно, это как-то связано с кодировкой, я недавно изменил кодировку с Mac по умолчанию на UTF-8. - person gprime; 21.07.2011