0

Predis を介してクライアント側のパーティショニングを使用しようとしています。すべてが機能しているように見えますが、値が複数のサーバーに保存されていることを確認するにはどうすればよいですか? 各サーバーのすべてのキーを一覧表示できるようにしたいのですが、predis のドキュメントでその方法がわかりません。簡単な情報呼び出しを実行しようとしていますが、例外エラーが発生します:

$predisClient->info()「接続のクラスターでは 'INFO' を使用できません」という例外が生成されます。(これは、1 つのサーバーを使用している場合に機能します。)

$predisClient->executeRaw( ['CLUSTER INFO'] )「接続のクラスターで 'CLUSTER INFO' を使用できません」という例外が生成されます。

My$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(ローカル セットアップに対してテストするためだけの場合を除き) を避け、prefer を使用しますSCAN。Predis を使用する場合、標準のorを簡単に使用できるようにPredis\Collection\Iterator\Keyspaceイテレータが抽象化されます。SCANforeachiterator_to_array()

于 2016-06-27T07:01:34.500 に答える