首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Predis协议错误:批量长度无效

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

Stack Overflow用户
提问于 2011-07-20 03:24:29
回答 2查看 10.5K关注 0票数 3

我正在使用predis,一切都很好,直到我开始收到这个错误:

代码语言:javascript
复制
ERR Protocol error: invalid bulk length

我不确定为什么我会得到它。错误在这个文件中: Predis/Network/StreamConnection.php in The method:

代码语言:javascript
复制
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()时,它会失败。

以下是导致此操作失败的代码:

代码语言:javascript
复制
$ids = array(1, 2, 3);
$predis = new Predis\Client();

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

我不允许设置数组吗?我当然可以设置一个数组。我唯一改变的是我的文件是UTF-8,所以也许这搞砸了什么?

任何帮助都将不胜感激。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-07-22 00:28:57

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

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

票数 3
EN

Stack Overflow用户

发布于 2011-07-20 08:56:03

您必须使用mset

使用set命令,Predis查找一个只有2个变量的数组(用于设置密钥=>散列)。设置3个关键点,你必须使用mset。

去做你似乎想做的事情:

代码语言:javascript
复制
$ids = array(1 => 'id-1', 2 => 'id-2', 3 => 'id-3');
$predis = new Predis\Client();

$predis->mset('testerKey', $ids);
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6752894

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档