我试图通过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。
答案 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
,因此您只需使用标准foreach
或iterator_to_array()
。