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


How to verify client side partitioning with Predis

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

$predisClient->info()生成"Cannot use 'INFO' over clusters of connections"异常。(这在使用一台服务器时有效。)

$predisClient->executeRaw( ['CLUSTER INFO'] )生成"Cannot use 'CLUSTER INFO' over clusters of connections"异常。

我的$predisClient定义如下:

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

我用的是redis 3.0.7, predis 1.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()