NODEIDパラメータを追加し、指定したシャードノードのみをスキャンします。-ERR invalid cursor(master node idx out of range)NODEIDパラメータを追加すると、指定したシャードノードのデータのみをスキャンでき、シャード単位の調査やシャードレベルの処理に適しています。f2f3c387b9fab0e67af02039845c60278b13bed0であると仮定し、以下のコマンドを実行します:scan 0 MATCH * COUNT 100 f2f3c387b9fab0e67af02039****************
cluster nodesコマンドを実行して取得できます。NODEIDパラメータを指定しない場合、SCANはクラスタ内のすべてのシャードのデータを走査します(Proxy 5.8.9以上が必要です)。カーソル0から反復を開始し、カーソルが再び0に戻ると走査完了です。package com.example.service.impl;public class RedisServiceImpl implements RedisService {// scanの最大再試行回数private static final int MAX_RETRIES = 3;private final RedisConnectionFactory connectionFactory;@Overridepublic void scanKeys(String pattern, int count) {try (Jedis jedis = connectionFactory.getConnection()) {int retryCount = 0;boolean scanCompleted = false;// scanプロセスのエラーをキャッチし、エラー発生時は0から再スキャンします。while (!scanCompleted && retryCount <= MAX_RETRIES) {String cursor = ScanParams.SCAN_POINTER_START;ScanParams scanParams = new ScanParams();scanParams.count(count);scanParams.match(pattern);try {while (true) {ScanResult<String> scanResult = jedis.scan(cursor, scanParams);List<String> keys = scanResult.getResult();if (!keys.isEmpty()) {processKeysWithBusinessLogic(keys); // 業務処理}cursor = scanResult.getCursor();// カーソルが「0」のときにスキャンが完了します。if (cursor.equals(ScanParams.SCAN_POINTER_START)) {scanCompleted = true;break;}}} catch (Exception e) {retryCount++;// 最大再試行回数を超えたため、再試行を終了します。if (retryCount > MAX_RETRIES) {throw new RuntimeException("最大再試行回数に達したため、スキャンに失敗しました", e);}}}}}}
パラメータ / ロジック | 説明 |
MAX_RETRIES | SCANの最大再試行回数です。例は3で、業務ニーズに応じて調整できます。 |
cursor | カーソルです。各スキャンは開始位置 0(ScanParams.SCAN_POINTER_START)から始まり、カーソルが再び0に戻ると走査完了を表します。 |
scanParams.match(pattern) | パターンに基づいてKeyをマッチングします。 |
scanParams.count(count) | 各イテレーションで返される要素数のヒントです。 |
異常捕捉 | カーソル失効などの例外をキャッチした後、再試行カウントを1増やし、カーソル 0から再スキャンします。MAX_RETRIESを超えた場合は例外をスローして終了し、無限ループを回避します。 |
0に戻り、scanCompletedがtrueの場合、完全に走査され、無限ループに陥っていないことを示します。invalid cursor(master node idx out of range) どうすればよいですか?0にリセットして再スキャンを開始してください。エラーを無視して元のカーソルで反復を続けると、無限ループに陥ります。0からスキャンを再開し、再試行上限を超えた場合は終了して例外をスローします。NODEIDパラメータを追加してください。具体的なコマンドの記述方法は、インスタンスの実際のサポート内容に準じます。フィードバック