このページは機械翻訳によるものです。内容の正確さは保証しておりません。 人力翻訳を依頼する

一般的なエラーとトラブルシューティング

更新日時2025-03-31 18:20

このトピックでは、ApsaraDB for Redis の一般的なエラーと、これらのエラーの解決策について説明します。

エラー

カテゴリ

エラーメッセージ

カテゴリ

エラーメッセージ

一般的な Redis エラー

プロキシモードのインスタンスにおける一般的なエラー

Lua スクリプトとトランザクションに関連するエラー

Jedis エラー

Lettuce エラー

Redisson エラー

Spring Data Redis エラー

StackExchange.Redis エラー

Predis エラー

PhpRedis エラー

go-redis エラー

node-redis エラー

一般的な Redis エラー

ERR illegal address

考えられる原因: クライアントの IP アドレスが Tair インスタンスのホワイトリストに追加されていません。

解決策: クライアントの IP アドレスを Tair インスタンスのホワイトリストに追加します。詳細については、「接続の診断を実行する」をご参照ください。

ERR sentinel compatibility mode is disabled

考えられる原因: Tair インスタンスで Sentinel 互換モードが有効になっていません。

解決策:コンソールでインスタンスの Sentinel 互換モードを有効にします。詳細については、「Sentinel 互換モードを有効にする」をご参照ください。

ERR max number of clients reached

考えられる原因: Tair インスタンスへの最大接続数に達しました。

解決策:

  • クライアントで接続リークが発生しているかどうかを確認します。たとえば、Jedis クライアントで JedisPool を使用した後に close 関数が呼び出されているかどうかを確認します。

  • 現在の接続セッションが想定どおりに実行されているかどうかを確認します。詳細については、「インスタンスセッションを管理する」をご参照ください。セッションを終了するか、インスタンスの構成をアップグレードすることで、インスタンスへの最大接続数を増やすことができます。

NOAUTH Authentication required

考えられる原因: Tair インスタンスに対してパスワードベースの認証が構成されていますが、クライアントがパスワードを提供していないか、間違ったパスワードを提供しています。

解決策:正しいアカウントのユーザー名とパスワードを使用してインスタンスに接続します。詳細については、「インスタンスに接続する」をご参照ください。

説明

6.4.0.RELEASE から 6.4.1.RELEASE までの Lettuce クライアントバージョンを使用している場合、正しいパスワードを入力してもこのエラーが発生する可能性があります。この問題は、CLIENT SETINFO コマンドをサポートするために Lettuce に導入された変更が原因であり、6.4.2.RELEASE で修正されています。

この問題が発生した場合は、RESP プロトコルを手動で RESP2 に切り替えるか、Lettuce クライアントを 6.4.2.RELEASE 以降にアップグレードできます。まだ Spring Data Redis クライアントを使用している場合は、クライアントを 3.4.2 以降にアップグレードすることをお勧めします。

WRONGPASS invalid username-password pair

考えられる原因:パスワードが無効です。

解決策:正しいアカウントのユーザー名とパスワードを使用してインスタンスに接続します。詳細については、「インスタンスに接続する」をご参照ください。

説明

インスタンスで Sentinel 互換モードが有効になっている場合は、「Sentinel 互換モードを使用してインスタンスに接続する」トピックを参照してください。

ERR invalid password

考えられる原因:パスワードが無効です。

解決策:正しいアカウントのユーザー名とパスワードを使用してインスタンスに接続します。詳細については、「インスタンスに接続する」をご参照ください。

説明

このエラーがデータ管理 (DMS) で報告された場合、考えられる原因は、前回のログイン時に DMS によって保存されたパスワードが、インスタンスの現在のパスワードと一致しないことです。DMS の [インスタンスリスト] で、インスタンスを見つけて、操作列の [その他] > [編集] を選択します。次に、[データベースパスワード] フィールドに新しいパスワードを入力して、再試行します。

Connection reset by peer

考えられる原因:クライアントバッファの例外により接続が閉じられました。

解決策:アプリケーションコードを確認するか、クライアントバッファのサイズを変更します。詳細については、このトピックの「Unexpected end of stream」セクションをご参照ください。

UnknownHostException

または、failed to connect: xxx.redis.rds.aliyuncs.com could not be resolved エラーが発生します。

考えられる原因: クライアントが Tair インスタンスのドメイン名を解決できません。

解決策:DNS サーバーを正しく構成します。詳細については、「DNS 解決の失敗による接続の問題をトラブルシューティングするにはどうすればよいですか?」をご参照ください。

OOM command not allowed when used memory > 'maxmemory'

考えられる原因: Tair インスタンスに設定されている最大メモリに達しました。

説明

Tair インスタンスがクラスタアーキテクチャを使用している場合、データシャードのメモリ使用量が、データシャードに設定されている最大メモリを超える可能性があります。

解決策:

  • インスタンスのメモリ使用量が 100% に達した場合は、インスタンス構成をアップグレードすることをお勧めします。詳細については、「インスタンスの構成を変更する」をご参照ください。

  • 単一のデータシャードのメモリ使用量が 100% に達した場合は、インスタンスに大きなキーが存在する可能性があります。オフラインキー分析またはインスタンス診断機能を使用して、原因を特定できます。

WRONGTYPE Operation against a key holding the wrong kind of value

考えられる原因:間違ったコマンドが実行されています。たとえば、文字列に対して HASH コマンドが実行されています。

解決策:誤ったコードを修正するか、正しいコマンドを使用します。詳細については、「コマンド」をご参照ください。

ERR unknown command 'xxx'

考えられる原因: 実行しようとしているコマンドは、Tair に存在しません。

解決策:インスタンスのバージョンがコマンドをサポートしているかどうかを確認します。詳細については、「Community Edition でサポートされているコマンド」をご参照ください。

説明

最新のマイナーバージョンは、より多くの機能とより高い安定性を提供します。インスタンスを最新のマイナーバージョンに更新することをお勧めします。詳細については、「インスタンスのマイナーバージョンを更新する」をご参照ください。

ERR command 'xxx' not support for your account

考えられる原因: Alibaba Cloud では Tair の特定のコマンドが無効になっているか、これらのコマンドが #no_loose_disabled-commands で指定されています。詳細については、「」「Redis Community Edition でサポートされているコマンド」および「」「高リスクコマンドを無効にする」をご参照ください。

解決策:#no_loose_disabled-commands で指定された無効なコマンドから、実行するコマンドを削除します。

NOPERM this user has no permissions to run the 'xxx'

考えられる原因: Alibaba Cloud では Tair の特定のコマンドが無効になっているか、これらのコマンドが #no_loose_disabled-commands で指定されています。詳細については、「」「Redis Community Edition でサポートされているコマンド」および「」「高リスクコマンドを無効にする」をご参照ください。

解決策:#no_loose_disabled-commands で指定された無効なコマンドから、実行するコマンドを削除します。

ERR FLUSHDB is not allowed in migrating mode

考えられる原因: Tair クラウドネイティブ クラスタインスタンスのデータシャード数が変更されている場合、FLUSHDB コマンドと FLUSHALL コマンドは無効になります。

解決策: Tair クラウドネイティブ クラスタインスタンスの変更が完了するまでお待ちください。詳細については、「インスタンスのシャード数を調整する」をご参照ください。

CROSSSLOT Keys in request don't hash to the same slot

考えられる原因: Tair クラスタインスタンスでは、直接接続モードの場合、DELMSETMGET など、スロットをまたぐ複数のキーに関連するコマンドはサポートされていません。

解決策:

  • 複数のキーを含むコマンドを実行する前に、CLUSTER KEYSLOT コマンドを使用して、すべてのキーが同じスロットにあることを確認します。

  • キー名を変更し、ハッシュタグを実装して、関連するキーが同じスロットに割り当てられるようにします。ただし、ハッシュタグを使用する場合は、データスキューを防ぐことが重要です。

  • インスタンスを、DELMGETMSET など、スロットをまたがる複数のキーを含むコマンドをサポートする、プロキシモードのクラスタインスタンスに変更します。詳細については、「プロキシノードの機能」をご参照ください。

ERR READONLY you can't write against a read only instance

考えられる原因: マスターレプリカ Tair インスタンスのスイッチオーバー、構成変更、またはマイナーバージョンアップデート中に、一時的な切断が発生し、インスタンスが最大 30 秒間読み取り専用の状態になります。

解決策:インスタンスが回復するまで待ちます。手動操作は必要ありません。アプリケーションの再接続と例外処理メカニズムを設計します。詳細については、「インスタンスの構成を変更する」をご参照ください。

Filed to connect to any host resolved for DNS name

考えられる原因:ホワイトリストが正しく構成されていません。

解決策:クライアントの IP アドレスをインスタンスのホワイトリストに追加します。詳細については、「ホワイトリストを構成する」をご参照ください。

説明

インターネット経由でインスタンスにアクセスする場合は、アウトバウンド IP アドレスをホワイトリストに追加します。https://cip.cc/ にアクセスして IP アドレスを取得できます。

プロキシモードのインスタンスにおける一般的なエラー

ERR client ip is not in whitelist

考えられる原因: クライアントの IP アドレスが Tair インスタンスのホワイトリストに追加されていません。

解決策: クライアントの IP アドレスを Tair インスタンスのホワイトリストに追加します。詳細については、「接続の診断を実行する」をご参照ください。

NOWRITE You can't write against a non-write redis

または、NOREAD You can't read against a non-read redis エラーが発生します。

考えられる原因:インスタンスの支払いが延滞しているか、期限切れになっています。インスタンスは ロック済 状態です。

解決策:アカウントに資金を追加するか、インスタンスを更新します。詳細については、「有効期限と支払い延滞」をご参照ください。

ERR syntax error

考えられる原因:実行したコマンドに構文エラーがあります。たとえば、このコマンドでは 4 つのパラメーターが必要ですが、3 つのパラメーターしか指定されていません。

解決策:コマンド構文が有効かどうかを確認します。詳細については、「コマンド」をご参照ください。

ERR no such db node

考えられる原因: Tair の社内コマンドを実行したときに、指定された db node パラメーターが無効です。

解決策:db node パラメーターを正しく指定します。db node の値は、インスタンスのデータシャード数より小さくなければなりません。詳細については、「プロキシモードのインスタンスの社内コマンド」をご参照ください。

ERR 'xxx' command keys must in same slot

考えられる原因: コマンドで要求されたキーが同じスロットに格納されていません。トランザクションまたはスクリプトを使用して Tair クラスタインスタンスでコマンドを実行する場合、要求されたキーは同じスロットに存在する必要があります。

解決策:トランザクションまたはスクリプトを変更します。CLUSTER KEYSLOT コマンドを使用して、要求されたキーが格納されているスロットをクエリできます。

重要

Tair クラスタインスタンスは、巡回冗長検査(CRC)アルゴリズムを使用して、キーを異なるスロットに均等に分散します。同じスロットにキーを格納する場合、ハッシュタグを使用できます。ただし、これによりデータスキューが発生する可能性があります。注意して進めてください。

ERR for redis cluster, eval/evalsha number of keys can't be negative or zero

考えられる原因: キーが指定されていないか、numkeys パラメーターが EVAL コマンドと EVALSHA コマンドで 0 以下の値に設定されています。

解決策:EVAL コマンドと EVALSHA コマンドを使用する場合は、少なくとも 1 つのキーを指定し、numkeys パラメーターを 0 より大きい値に設定する必要があります。詳細については、「Lua スクリプトの使用」をご参照ください。

ERR request refused, too many pending request, now count xxx, beyond threshold xxx

考えられる原因: クライアントが無効なパイプラインを使用しているため、Tair のバックエンドで保留中のリクエストが滞留しています。

解決策:パイプライン化されたリクエストの数を減らします。

ERR redis temporary failure

考えられる原因: Tair インスタンスのノードに接続するときに、ネットワークジッター、過剰な接続数、マスターレプリカのスイッチオーバー、または実行中のスロークエリが原因でタイムアウトエラーが発生します。

解決策:インスタンスが回復するまで待ちます。手動操作は必要ありません。アプリケーションの再接続と例外処理メカニズムを設計します。

ERR redis temporary failure (ErrorCode 7002)

考えられる原因: Tair インスタンスのノードに接続すると、インスタンス構成の変更またはマスターレプリカのスイッチオーバーの実行中にタイムアウトエラーが発生します。

解決策:インスタンスが回復するまで待ちます。手動操作は必要ありません。アプリケーションの再接続と例外処理メカニズムを設計します。

Lua スクリプトとトランザクションに関連するエラー

NOSCRIPT No matching script. Please use EVAL.

考えられる原因: EVALSHA コマンドを実行したときに、SHA1 値に対応するスクリプトが Tair インスタンスにキャッシュされていません。

解決策: EVAL または SCRIPT LOAD コマンドを実行して、必要なスクリプトを Tair インスタンスにキャッシュしてから、再試行してください。詳細については、「NOSCRIPT エラーの処理」をご参照ください。

BUSY Redis is busy running a script. You can only call SCRIPT KILL or SHUTDOWN NOSAVE.

考えられる原因:Lua スクリプトがタイムアウトしました。

解決策:SCRIPT KILL コマンドを実行してスクリプトの実行を終了するか、実行が終了するまで待ちます。詳細については、「Lua スクリプトのタイムアウトを処理する」をご参照ください。

ERR command eval not support for normal user

考えられる原因:EVAL 関連のコマンドを実行できません。

解決策:インスタンスを最新のマイナーバージョンに更新します。詳細については、「インスタンスのマイナーバージョンを更新する」をご参照ください。

ERR eval/evalsha command keys must be in same slot

考えられる原因:Lua スクリプトに含まれるキーが同じスロットにありません。このエラーは、クラスタインスタンスでよく発生します。

解決策:Lua スクリプトを変更します。CLUSTER KEYSLOT コマンドを実行することで、キーが存在するスロットをクエリできます。詳細については、「クラスタインスタンスにおける Lua スクリプトの制限」をご参照ください。

ERR bad lua script for redis cluster, all the keys that the script uses should be passed using the KEYS array

考えられる原因:このエラーは、Lua スクリプトに対するプロキシノードの制限が原因である可能性があります。

解決策:すべてのキーを配列で指定します。例:EVAL "return redis.call('mget', KEYS[1], KEYS[2])" 2 foo {foo}bar。キーは Lua 変数で置き換えることはできません。詳細については、「クラスタインスタンスにおける Lua スクリプトの制限」をご参照ください。

EXECABORT Transaction discarded because of previous errors

考えられる原因:トランザクションで実行したコマンドに構文エラーまたはエラーがあります。

解決策:コードロジックを確認し、コマンドの構文エラーを修正します。

UNKILLABLE Sorry the script already executed write commands against the dataset.

考えられる原因:現在の Lua スクリプトに含まれる書き込み操作が実行されています。この場合、SCRIPT KILL コマンドを実行できません。

解決策: コンソールでインスタンスを見つけ、再起動[アクション] 列でクリックします。詳細については、「インスタンスを再起動する」をご参照ください。

UNKILLABLE The busy script was sent by a master instance in the context of replication and cannot be killed.

考えられる原因:現在の Lua スクリプトは、マスターノードによって対応するレプリカノードに転送されます。この場合、SCRIPT KILL コマンドを実行できません。

解決策: コンソールでインスタンスを見つけ、再起動 [操作] 列をクリックします。詳細については、「インスタンスを再起動する」をご参照ください。

NOTBUSY No scripts in execution right now.

考えられる原因:Lua スクリプトは実行されていません。

解決策:手動操作は必要ありません。SCRIPT KILL コマンドを実行しないでください。

Jedis エラー

Could not get a resource from the pool

考えられる原因:JedisPool から Jedis 接続を借用できません。

  • blockWhenExhausted パラメーターがデフォルト値の true に設定されている場合、JedisPool から接続が利用できないと、クライアントは maxWaitMillis パラメーターで指定された数ミリ秒待機します。クライアントが長時間待機した後も JedisPool から利用可能な Jedis 接続を取得できない場合は、次の例外がスローされます。

    redis.clients.jedis.exceptions.JedisConnectionException: Could not get a resource from the pool
        ...
    Caused by: java.util.NoSuchElementException: Timeout waiting for idle object
        at org.apache.commons.pool2.impl.GenericObjectPool.borrowObject(GenericObjectPool.java:449)
  • blockWhenExhausted パラメーターが false に設定されている場合、JedisPool から接続が利用できないと、次の例外がスローされます。

    redis.clients.jedis.exceptions.JedisConnectionException: Could not get a resource from the pool
        ...
    Caused by: java.util.NoSuchElementException: Timeout waiting for idle object
        at org.apache.commons.pool2.impl.GenericObjectPool.borrowObject(GenericObjectPool.java:449)

解決策:エラーをトラブルシューティングするには、次の点を考慮してください。

  • 接続リーク

    デフォルトでは、maxTotal は 8 に設定されています。次のコードは、Jedis クライアントが JedisPool から 8 回接続を借用していますが、これらの接続を返していないことを示しています。これが、Jedis クライアントが JedisPool から別の接続を取得しようとする 9 回目の試行で jedisPool.getResource().ping() コマンドを実行できない理由です。

    GenericObjectPoolConfig poolConfig = new GenericObjectPoolConfig();
    JedisPool jedisPool = new JedisPool(poolConfig, "127.0.0.1", 6379);
    // クライアントは JedisPool から 8 回接続を借用していますが、これらの接続を返していません。
    for (int i = 0; i < 8; i++) {
        Jedis jedis = null;
        try {
            jedis = jedisPool.getResource();
            jedis.ping();
        } catch (Exception e) {
            logger.error(e.getMessage(), e);
        }
    }
    jedisPool.getResource().ping();

    推奨コード:

    Jedis jedis = null;
    try {
        jedis = jedisPool.getResource();
        // 実行するコマンド。
        jedis.executeCommand()
    } catch (Exception e) {
        // コマンドにキーが含まれている場合は、エラーログにキーを表示するように構成することをお勧めします。こうすることで、キーを使用して、問題が発生しているデータシャードを特定できます。
        logger.error(e.getMessage(), e);
    } finally {
        // クライアントは借用した接続を閉じません。代わりに、クライアントは接続を JedisPool に返します。
        if (jedis != null)
            jedis.close();
    }
  • maxTotal パラメーターの値が小さい

    システムで多数の操作が同時処理されている場合、maxTotal パラメーターの値が小さいと例外が発生する可能性があります。たとえば、コマンドの実行には平均で約 1 ミリ秒かかります。これは、次の式を使用して計算されます。リソースの借用または返却に消費される時間 + Jedis がコマンドを実行するために消費される時間 + ネットワークレイテンシ。1 つの接続のクエリ/秒 (QPS) は約 1,000 で、予想される合計 QPS は 50,000 です。理論的には、50,000 の予想 QPS を達成するには、50 の maxTotal 値が必要です。maxTotal 値は、50,000 を 1,000 で割ることによって得られます。

    この場合、クライアントで次のコマンドを実行して、クライアント接続数を取得できます。取得した値に基づいて、maxTotal の値を調整できます。

    netstat -an | grep 6379 | grep EST | wc -l
  • 接続ブロッキング

    Tair インスタンスへの接続が、低速クエリなどの理由でブロックされると、すべての接続が指定されたタイムアウト期間内に待機します。この場合、多数の操作が同時に処理されると、タイムアウトエラーが報告される可能性があります。詳細については、「java.net.SocketTimeoutException: connect timed out」をご参照ください。

  • 接続拒否

    JedisPool から接続を取得しようとしたときに利用可能な接続がない場合、Jedis は Jedis 接続の作成を試みます。ただし、接続試行は拒否され、例外がスローされます。例:

    redis.clients.jedis.exceptions.JedisConnectionException: Could not get a resource from the pool
        at redis.clients.util.Pool.getResource(Pool.java:50)
        at redis.clients.jedis.JedisPool.getResource(JedisPool.java:99)
        at TestAdmin.main(TestAdmin.java:14)
    Caused by: redis.clients.jedis.exceptions.JedisConnectionException: java.net.ConnectException: Connection refused
        at redis.clients.jedis.Connection.connect(Connection.java:164)
        at redis.clients.jedis.BinaryClient.connect(BinaryClient.java:80)
        at redis.clients.jedis.BinaryJedis.connect(BinaryJedis.java:1676)
        at redis.clients.jedis.JedisFactory.makeObject(JedisFactory.java:87)
        at org.apache.commons.pool2.impl.GenericObjectPool.create(GenericObjectPool.java:861)
        at org.apache.commons.pool2.impl.GenericObjectPool.borrowObject(GenericObjectPool.java:435)
        at org.apache.commons.pool2.impl.GenericObjectPool.borrowObject(GenericObjectPool.java:363)
        at redis.clients.util.Pool.getResource(Pool.java:48)
        ... 2 more
    Caused by: java.net.ConnectException: Connection refused
        at java.net.PlainSocketImpl.socketConnect(Native Method)
        at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:339)
        at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:200)
        at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:182)
        at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392)
        at java.net.Socket.connect(Socket.java:579)
        at redis.clients.jedis.Connection.connect(Connection.java:158)
        ... 9 more

    at redis.clients.jedis.Connection.connect(Connection.java:158) は、Jedis がソケット接続を作成して connect 関数を呼び出そうとしましたが、接続試行が拒否されたことを示しています。Jedis ソースコード:

    socket.setSoLinger(true, 0);
    158:  socket.connect(new InetSocketAddress(host, port), connectionTimeout);

    通常、この問題に対処するには、Tair インスタンスのドメイン名構成が正しいかどうかを確認し、対応する期間内のネットワーク接続を確認する必要があります。

java.net.SocketTimeoutException: connect timed out

考えられる原因: クライアントと Tair インスタンス間の接続がタイムアウトしました。

解決策:「Tair での接続の問題をトラブルシューティングするにはどうすればよいですか?」トピックを参照してください。

java.net.SocketTimeoutException: Read timed out

考えられる原因:ネットワーク接続の不安定、読み取り/書き込みタイムアウト期間の短さ、スロークエリ、または接続ブロッキングが原因で、Jedis API 呼び出しがタイムアウトしました。

解決策:タイムアウト期間を延長するか、インスタンス診断を実行して、対応する時点でパフォーマンスの問題または例外が発生しているかどうかを確認します。

説明

このエラーが DMS で発生した場合、インスタンスの VPC エンドポイントまたはポートが変更されている可能性があります。DMS の [インスタンスリスト] で、インスタンスを見つけて、操作列の [その他] > [編集] を選択します。表示されるダイアログボックスで、[接続方法][接続文字列アドレス] に設定します。次に、[接続文字列アドレス] フィールドに新しいエンドポイントを入力して、再試行します。

No reachable node in cluster

考えられる原因:JedisCluster にアクセスできません。

解決策: クライアントが Tair インスタンスに初めて接続するときは、クライアントの IP アドレスが Tair インスタンスのホワイトリストに追加されているかどうかを確認します。 Tair インスタンスへの接続が初めてでない場合は、インスタンス診断を実行して原因を特定します。

Caused by: java.lang.NumberFormatException: For input string: "6379@13028"

考えられる原因:Jedis 2.8.0 以前では、ClusterNodeInformationParser が導入され、cluster slots の出力が解決されます。ただし、オープンソース Redis は出力の型を変更しました。これが、NumberFormatException エラーが報告される理由です。

解決策:Jedis クライアントを 2.9.0 以降に更新します。

No more cluster attempts left

考えられる原因:API 呼び出しがタイムアウトし、5 回の再試行も失敗しました。デフォルトでは、API 呼び出しがタイムアウトした後、JedisCluster は 5 回再試行します。

解決策:タイムアウト期間を延長するか、インスタンス診断を実行します。

Unexpected end of stream

考えられる原因:Jedis クライアントバッファで例外が発生します。エラーをトラブルシューティングするには、次の点を考慮してください。

  • 複数のスレッドが 1 つの接続を共有している

    通常、1 つのスレッドは 1 つの Jedis 接続を使用します。次のコードは、2 つのスレッドが 1 つの Jedis 接続を共有していることを示しています。

    new Thread(new Runnable() {
        public void run() {
            for (int i = 0; i < 100; i++) {
                jedis.get("hello");
            }
        }
    }).start();
    new Thread(new Runnable() {
        public void run() {
            for (int i = 0; i < 100; i++) {
                jedis.hget("haskey", "f");
            }
        }
    }).start();

    この問題を防ぎ、スレッドセーフを確保するには、JedisPool を使用して Jedis 接続を管理します。

  • 長時間アイドル状態の接続

    サーバーは長時間アイドル状態の接続を閉じます。インスタンスの timeout 設定と JedisPool の関連設定をクエリして、長時間アイドル状態の接続を定期的にチェックしてクリーンアップするかどうかを判断します。

    説明

    デフォルトでは、Tair は長時間アイドル状態の接続を閉じません。タイムアウト パラメーターの値を変更すると、このエラーが報告される場合があります。詳細については、「アイドル状態のクライアント接続のタイムアウト期間を指定する」をご参照ください。

解決策:複数のスレッドが Jedis コードを共有しているかどうか、またはサーバーが長時間アイドル状態の接続を閉じているかどうかを確認します。

java.lang.Long cannot be cast to java.util.List

考えられる原因:複数のスレッド間で同じ Jedis 接続が共有されている場合に、このエラーが報告されます。これは、Jedis 自体がスレッドセーフではなく、複数のスレッドで同時に使用できないためです。

解決策:単一のスレッドで 1 つの Jedis 接続を使用します。そのためには、JedisPool を使用できます。

Broken pipe (Write failed)

考えられる原因:単一接続モードの Jedis クライアントでタイムアウトエラーが発生し、クライアントがソケットを閉じた後、インスタンスにデータを書き込み続けます。

解決策:単一のスレッドで 1 つの Jedis 接続を使用します。そのためには、JedisPool を使用できます。

No way to dispatch this command to Redis Cluster because keys have different slots

考えられる原因:JedisCluster が異なるスロットにあるキーに対して操作を実行します。

解決策:ハッシュタグを使用してキーを変更します。

説明

プロキシモードを使用して、クラスタアーキテクチャの制限を無効にすることもできます。

Lettuce エラー

Connection to xxx not allowed. This Partition is not known in the cluster view.

考えられる原因: デフォルトでは、validateClusterNodeMembership は true に設定され、refreshOption は Lettuce クライアントに対して null に設定されています。Tair インスタンスのルーティングアドレスが変更された後、refreshOption が null に設定されているため、ルートテーブルは更新されません。この場合、validateClusterNodeMembership でエラーが報告されます。

解決策:refreshOption パラメーターを指定し、validateClusterNodeMembership パラメーターを false に設定します。詳細については、「Lettuce」をご参照ください。

io.lettuce.core.RedisConnectionException: Unable to connect xxx

考えられる原因: クライアントと Tair インスタンス間の接続がタイムアウトしました。

解決策:「Tair での接続の問題をトラブルシューティングするにはどうすればよいですか?」トピックを参照してください。

java.nio.channels.UnresolvedAddressException

考えられる原因:このエラーは、Netty バージョンが原因で発生する可能性が最も高くなります。

解決策:Netty バージョンを確認します。新しいバージョンを使用することをお勧めします。詳細については、GitHub を参照してください。

ERR Unknown sentinel subcommand 'master'

考えられる原因: マスター/レプリカ Sentinel モードでは、Lettuce クライアントは Sentinel master/slave コマンドを Tair インスタンスに送信します。ただし、Sentinel 互換モードのインスタンスは、Sentinel get-master-addr-by-name コマンドのみをサポートしています。

解決策: Sentinel 以外のモードに切り替えるようにコードを変更します。Tair は独自の 高可用性 コンポーネントを使用しています。Sentinel 互換モードを使用する必要はありません。

Unknown command: 一部のインスタンスバージョンでは RESP3 プロトコルがサポートされていません

考えられる原因:Redis 6.0 以降では RESP3 プロトコルがサポートされています。HELLO コマンドを実行して、接続を目的の RESP プロトコルバージョンに切り替えることができます。ただし、以前のバージョンのインスタンスの中には、HELLO コマンドをサポートしていないものがあり、互換性の問題が発生します。

解決策: Tair インスタンスにアクセスするために、RESP2 プロトコルを使用するようにプログラムを構成できます。例:

client.setOptions(ClientOptions.builder()
    .protocolVersion(ProtocolVersion.RESP2)
    .build());

Redis クライアントとして Lettuce を使用する Spring Data Redis の例:

LettuceClientConfiguration lettuceClientConfiguration = LettuceClientConfiguration.builder().
    clientOptions(ClientOptions.builder().protocolVersion(ProtocolVersion.RESP2).build()).build();

return new LettuceConnectionFactory(redisClusterConfiguration, lettuceClientConfiguration);

Redisson エラー

org.redisson.client.RedisConnectionException: Unable to connect to Redis server xxx

考えられる原因: クライアントと Tair インスタンス間の接続がタイムアウトしました。

解決策:「Tair での接続の問題をトラブルシューティングするにはどうすればよいですか?」トピックを参照してください。

No enum constant org.redisson.cluster.ClusterNodeInfo.Flag.NOFAILOVER

考えられる原因:この Redisson バージョンにはバグがあります。詳細については、GitHub を参照してください。

解決策:Redisson クライアントを 3.11.6 以降に更新します。

Spring Data Redis エラー

NOPERM this user has no permissions to run the 'config|get' command

考えられる原因: インスタンスのバージョンが [インスタンス情報] ページに Redis 7.0 と表示されています。CONFIG コマンドは、Redis 7.0 を実行する ApsaraDB for Redis インスタンスでは無効になっています。

アプリケーションの起動時に、Spring Data Redis は CONFIG SET コマンドを実行して、notify-keyspace-events パラメーターを動的に設定し、KeyspaceEventMessageListener 機能を有効にします。この場合、CONFIG SET コマンドが無効になっているため、アプリケーションは起動時にエラーをスローします。

解決策:次の方法を使用して、keyspaceNotificationsConfigParameter を空のままにして、この問題を回避します。SpringRedisTest の例を参照できます。詳細については、「Spring Data Redis」をご参照ください。

@EnableRedisRepositories(enableKeyspaceEvents = RedisKeyValueAdapter.EnableKeyspaceEvents.ON_STARTUP, keyspaceNotificationsConfigParameter = "")

StackExchange.Redis エラー

Multiple databases are not supported on this server; cannot switch to database

考えられる原因:クラスタインスタンスでは SELECT コマンドはサポートされていません。

解決策:cluster_compat_enable パラメーターを 0 に設定して、オープンソース Redis Cluster 構文との互換性を無効にします。次に、クライアントを再起動して、再試行します。詳細については、「インスタンスパラメーターを構成する」をご参照ください。

Predis エラー

Error while reading line from the server.

考えられる原因:読み取りリクエストがタイムアウトしました。スロークエリが進行中である可能性があります。

解決策:タイムアウト期間を延長するか、read_write_timeout0 または -1 に設定します。詳細については、「Predis の質問」をご参照ください。

PhpRedis エラー

Cannot assign requested address

考えられる原因: クライアントが短期間の接続で Tair インスタンスに接続しています。

解決策:connect の代わりに pconnect を使用するか、クライアントがデプロイされている Elastic Compute Service (ECS) インスタンスの tcp_max_tw_buckets パラメーター値を変更します。詳細については、「「Cannot assign requested address」エラーが返された場合はどうすればよいですか?」をご参照ください。

redis protocol error, got ' ' as reply type byte

考えられる原因:この PhpRedis バージョンにはバグがあります。詳細については、GitHub を参照してください。

解決策:PhpRedis クライアントを最新バージョンに更新します。

php_network_getaddresses: getaddrinfo failed: Temporary failure in name resolution

解決策:DNS サーバーを正しく構成します。詳細については、「DNS 解決の失敗による接続の問題をトラブルシューティングするにはどうすればよいですか?」をご参照ください。

考えられる原因: クライアントが Tair インスタンスのドメイン名を解決できません。

go-redis エラー

panic: got 4 elements in cluster info address, expected 2 or 3

考えられる原因: ご利用の go-redis クライアントのバージョンが Redis 7.0 以降と互換性がありません。詳細については、「GitHub」をご参照ください。

解決策:go-redis 9.0 以降を使用します。

node-redis エラー

SCAN コマンドが無限ループで実行されるか、空の結果が返されます

考えられる原因:SCAN コマンドによって返される Cursor 値が、JavaScript で正確に表現できる最大の整数値 (Number.MAX_SAFE_INTEGER) を超える可能性があります。これにより、カーソル値が不正確になり、無限ループが発生する可能性があります。詳細については、GitHub を参照してください。

解決策:node-redis クライアントを 5.0.0 以降に更新します。

  • 目次 (1, M)
  • エラー
  • 一般的な Redis エラー
  • ERR illegal address
  • ERR sentinel compatibility mode is disabled
  • ERR max number of clients reached
  • NOAUTH Authentication required
  • WRONGPASS invalid username-password pair
  • ERR invalid password
  • Connection reset by peer
  • UnknownHostException
  • OOM command not allowed when used memory > 'maxmemory'
  • WRONGTYPE Operation against a key holding the wrong kind of value
  • ERR unknown command 'xxx'
  • ERR command 'xxx' not support for your account
  • NOPERM this user has no permissions to run the 'xxx'
  • ERR FLUSHDB is not allowed in migrating mode
  • CROSSSLOT Keys in request don't hash to the same slot
  • ERR READONLY you can't write against a read only instance
  • Filed to connect to any host resolved for DNS name
  • プロキシモードのインスタンスにおける一般的なエラー
  • ERR client ip is not in whitelist
  • NOWRITE You can't write against a non-write redis
  • ERR syntax error
  • ERR no such db node
  • ERR 'xxx' command keys must in same slot
  • ERR for redis cluster, eval/evalsha number of keys can't be negative or zero
  • ERR request refused, too many pending request, now count xxx, beyond threshold xxx
  • ERR redis temporary failure
  • ERR redis temporary failure (ErrorCode 7002)
  • Lua スクリプトとトランザクションに関連するエラー
  • NOSCRIPT No matching script. Please use EVAL.
  • BUSY Redis is busy running a script. You can only call SCRIPT KILL or SHUTDOWN NOSAVE.
  • ERR command eval not support for normal user
  • ERR eval/evalsha command keys must be in same slot
  • ERR bad lua script for redis cluster, all the keys that the script uses should be passed using the KEYS array
  • EXECABORT Transaction discarded because of previous errors
  • UNKILLABLE Sorry the script already executed write commands against the dataset.
  • UNKILLABLE The busy script was sent by a master instance in the context of replication and cannot be killed.
  • NOTBUSY No scripts in execution right now.
  • Jedis エラー
  • Could not get a resource from the pool
  • java.net.SocketTimeoutException: connect timed out
  • java.net.SocketTimeoutException: Read timed out
  • No reachable node in cluster
  • Caused by: java.lang.NumberFormatException: For input string: "6379@13028"
  • No more cluster attempts left
  • Unexpected end of stream
  • java.lang.Long cannot be cast to java.util.List
  • Broken pipe (Write failed)
  • No way to dispatch this command to Redis Cluster because keys have different slots
  • Lettuce エラー
  • Connection to xxx not allowed. This Partition is not known in the cluster view.
  • io.lettuce.core.RedisConnectionException: Unable to connect xxx
  • java.nio.channels.UnresolvedAddressException
  • ERR Unknown sentinel subcommand 'master'
  • Unknown command: 一部のインスタンスバージョンでは RESP3 プロトコルがサポートされていません
  • Redisson エラー
  • org.redisson.client.RedisConnectionException: Unable to connect to Redis server xxx
  • No enum constant org.redisson.cluster.ClusterNodeInfo.Flag.NOFAILOVER
  • Spring Data Redis エラー
  • NOPERM this user has no permissions to run the 'config|get' command
  • StackExchange.Redis エラー
  • Multiple databases are not supported on this server; cannot switch to database
  • Predis エラー
  • Error while reading line from the server.
  • PhpRedis エラー
  • Cannot assign requested address
  • redis protocol error, got ' ' as reply type byte
  • php_network_getaddresses: getaddrinfo failed: Temporary failure in name resolution
  • go-redis エラー
  • panic: got 4 elements in cluster info address, expected 2 or 3
  • node-redis エラー
  • SCAN コマンドが無限ループで実行されるか、空の結果が返されます
フィードバック
phone お問い合わせ

Chat now with Alibaba Cloud Customer Service to assist you in finding the right products and services to meet your needs.

alicare alicarealicarealicare