首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用带有redis群集的管道时的Predis错误

使用带有redis群集的管道时的Predis错误
EN

Stack Overflow用户
提问于 2015-07-22 11:30:16
回答 1查看 2.3K关注 0票数 0

我尝试在我的redis集群中添加一个键值对,并为一个管道中的新键设置“过期”。每次我得到一个键被移动的错误,但是我认为Predis应该像不使用流水线一样遵循moved语句。

难道不可能在管道里打个过期电话吗?我使用Predis 1.0.2dev和redis_version: 3.0.2

这工作:

代码语言:javascript
复制
$parameters = ['tcp://10.9.200.51:47801', 'tcp://10.9.200.52:47801', 'tcp://10.9.200.53:47801', 'tcp://10.9.200.54:47801'];
$options    = ['cluster' => 'redis'];

$redis = new Predis\Client($parameters, $options);

for($i = 0; $i < 10; $i++)
{
    $rand = mt_rand(1111111,9999999);
    $k = 'test_'.$rand;
    try{
        $redis->set($k, 1);
        $redis->expire($k, 10);
    }
    catch(Exception $ex)
    {
        print_r($ex);
    }
}

?>

--这不起作用:

代码语言:javascript
复制
$parameters = ['tcp://10.9.200.51:47801', 'tcp://10.9.200.52:47801', 'tcp://10.9.200.53:47801', 'tcp://10.9.200.54:47801'];
$options    = ['cluster' => 'redis'];

$redis = new Predis\Client($parameters, $options);

$pipe = $redis->pipeline();

for($i = 0; $i < 10; $i++)
{
    $rand = mt_rand(1111111,9999999);
    $k = 'test_'.$rand;
    try{
        $pipe->set($k, 1);
        $pipe->expire($k, 10);
    }
    catch(Exception $ex)
    {
        print_r($ex);
    }
}

$pipe->execute();
?>

我得到了这个错误:

代码语言:javascript
复制
PHP Fatal error:  Uncaught exception 'Predis\Response\ServerException' with message 'MOVED 7276 10.9.200.61:47902' in /var/www/predis_test/Predis/Pipeline/Pipeline.php:105
Stack trace:
#0 /var/www/predis_test/Predis/Pipeline/Pipeline.php(149): Predis\Pipeline\Pipeline->exception(Object(Predis\Connection\Aggregate\RedisCluster), Object(Predis\Response\Error))
#1 /var/www/predis_test/Predis/Pipeline/Pipeline.php(168): Predis\Pipeline\Pipeline->executePipeline(Object(Predis\Connection\Aggregate\RedisCluster), Object(SplQueue))
#2 /var/www/predis_test/Predis/Pipeline/Pipeline.php(217): Predis\Pipeline\Pipeline->flushPipeline()
#3 /var/www/predis_test/lasttest.php(31): Predis\Pipeline\Pipeline->execute()
#4 {main}
  thrown in /var/www/predis_test/Predis/Pipeline/Pipeline.php on line 105

编辑:似乎不适用于redis集群。当我删除过期的调用并且只有管道中的set调用时,我会得到相同的错误。

EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31561851

复制
相关文章

相似问题

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