Php Predis协议错误:无效的批量长度
我正在使用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
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);