如何使用Predis验证客户端分区

时间:2016-06-24 21:00:58

标签: php redis predis

我试图通过Predis使用客户端分区。一切似乎都有效,但我如何验证值存储在多个服务器上?我希望能够列出每台服务器上的所有密钥,但是不知道如何在predis文档中。我试着做一个简单的信息调用,但得到异常错误:

$predisClient->info()生成"无法使用' INFO'通过集群连接"例外。 (这在使用一台服务器时确实有效。)

$predisClient->executeRaw( ['CLUSTER INFO'] )生成"无法使用' CLUSTER INFO'通过集群连接"异常。

我的$predisClient定义如下:

$predisClient = new Predis\Client(['tcp:://127.0.0.1', 'tcp://<REMOTE SERVER IP HERE>']);

我使用的是redis 3.0.7和predis 1.1。

1 个答案:

答案 0 :(得分:1)

考虑到您使用的是Predis v1.1,您只需执行以下操作:

foreach ($client as $node) {
    $info = $node->info('keyspace');
    // ...
}

这适用于redis-cluster和客户端分片群集。请注意,您已将客户端配置为使用后者,但CLUSTER INFO仅受redis-cluster支持(您无论如何都需要将此命令指向特定节点,因为此命令不带任何关键含义, Predis无法计算一个插槽。

如果要列出存储在每个节点上的密钥,请避免KEYS(除非它仅用于针对本地设置进行测试)并且更喜欢SCAN。使用Predis时,Predis\Collection\Iterator\Keyspace迭代器会摘要SCAN,因此您只需使用标准foreachiterator_to_array()