如何使用 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. When using Predis, the Predis\Collection\Iterator\Keyspace 迭代器抽象 SCAN 这样你可以简单地使用标准 foreachiterator_to_array().