3 Stimmen

Predis Protokollfehler: ungültige Bulk-Länge

Ich verwende Predis und alles war gut, bis ich diesen Fehler bekam:

ERR Protocol error: invalid bulk length

Ich bin mir nicht sicher, warum ich sie bekomme. Der Fehler befindet sich in dieser Datei: Predis/Network/StreamConnection.php in dieser Methode:

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);
}

Es schlägt fehl, wenn es versucht, eine strlen() auf ein Array zu tun.

Hier ist der Code, der diesen Fehler verursacht:

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

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

Darf ich ein Array nicht einstellen? Natürlich kann ich ein Array setzen. Das einzige, was ich geändert habe, war, dass ich meine Dateien UTF-8 mache, also vielleicht hat das etwas vermasselt?

Für jede Hilfe wären wir dankbar.

4voto

gprime Punkte 2205

Ich habe das Problem und eine Lösung gefunden. Wenn man von memcached kommt, wo das Array automatisch serialisiert wird, ist das in PRedis nicht das Gleiche. PRedis wird niemals etwas serialisieren, wenn ein Set oder Get ausgeführt wird.

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

1voto

Colum Punkte 3764

Sie müssen Folgendes verwenden mset .

Mit dem set Befehl sucht Predis nach einem Array mit nur 2 Variablen (um den Schlüssel => Hash zu setzen). Um 3 Schlüssel zu setzen, müssen Sie mset verwenden.

Um das zu tun, was Sie anscheinend versuchen:

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

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

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X