0

我正在尝试通过 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。

4

1 回答 1

2

考虑到您使用的是 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().

于 2016-06-27T07:01:34.500 回答