我正在尝试通过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
抽象出来,这样您就可以简单地使用标准的foreach
或iterator_to_array()
。