Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/redis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Predis协议错误:无效的批量长度_Php_Redis_Predis - Fatal编程技术网

Php Predis协议错误:无效的批量长度

Php Predis协议错误:无效的批量长度,php,redis,predis,Php,Redis,Predis,我正在使用predis,在我开始出现这个错误之前,一切都很好: ERR Protocol error: invalid bulk length 我不知道为什么我会得到它。错误出现在以下文件中:Predis/Network/StreamConnection.php在此方法中: public function writeCommand(ICommand $command) { $commandId = $command->getId(); $arguments = $comm

我正在使用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);
}
不允许我设置数组吗?当然我可以设置数组。我唯一改变的是我把我的文件改成UTF-8,所以也许这把事情搞砸了


任何帮助都将不胜感激

您必须使用
mset

使用
set
命令,Predis正在寻找一个只有2个变量的数组(设置key=>hash)。设置3个键,必须使用mset

做你似乎想做的事:

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

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

我找到了问题和解决办法。来自memcached,它将自动序列化数组,这在PRedis中是不同的。在执行set或get时,PRedis永远不会序列化任何内容


不,我不想做多集。我想将该数组存储在一个键中。这可能与编码有关,我最近将编码从mac默认更改为UTF-8。
$ids = array(1 => 'id-1', 2 => 'id-2', 3 => 'id-3');
$predis = new Predis\Client();

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