エラー
カテゴリ | エラーメッセージ |
一般的な Redis エラー | |
プロキシモードのインスタンスにおける一般的なエラー | |
Lua スクリプトとトランザクションに関連するエラー | |
Jedis エラー | |
Lettuce エラー | |
Redisson エラー | |
Spring Data Redis エラー | |
StackExchange.Redis エラー | |
Predis エラー | |
PhpRedis エラー | |
go-redis エラー | |
node-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
考えられる原因:パスワードが無効です。
解決策:正しいアカウントのユーザー名とパスワードを使用してインスタンスに接続します。詳細については、「インスタンスに接続する」をご参照ください。
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 インスタンスがクラスタアーキテクチャを使用している場合、データシャードのメモリ使用量が、データシャードに設定されている最大メモリを超える可能性があります。
WRONGTYPE Operation against a key holding the wrong kind of value
考えられる原因:間違ったコマンドが実行されています。たとえば、文字列に対して HASH
コマンドが実行されています。
解決策:誤ったコードを修正するか、正しいコマンドを使用します。詳細については、「コマンド」をご参照ください。
ERR unknown command 'xxx'
考えられる原因: 実行しようとしているコマンドは、Tair に存在しません。
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 クラスタインスタンスでは、直接接続モードの場合、DEL、MSET、MGET など、スロットをまたぐ複数のキーに関連するコマンドはサポートされていません。
解決策:
複数のキーを含むコマンドを実行する前に、CLUSTER KEYSLOT コマンドを使用して、すべてのキーが同じスロットにあることを確認します。
キー名を変更し、ハッシュタグを実装して、関連するキーが同じスロットに割り当てられるようにします。ただし、ハッシュタグを使用する場合は、データスキューを防ぐことが重要です。
インスタンスを、DEL、MGET、MSET など、スロットをまたがる複数のキーを含むコマンドをサポートする、プロキシモードのクラスタインスタンスに変更します。詳細については、「プロキシノードの機能」をご参照ください。
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 コマンドを実行しないでください。
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);
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 {
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: 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 クライアントバッファで例外が発生します。エラーをトラブルシューティングするには、次の点を考慮してください。
解決策:複数のスレッドが 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 が異なるスロットにあるキーに対して操作を実行します。
解決策:ハッシュタグを使用してキーを変更します。
説明
プロキシモードを使用して、クラスタアーキテクチャの制限を無効にすることもできます。
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」をご参照ください。
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);
No enum constant org.redisson.cluster.ClusterNodeInfo.Flag.NOFAILOVER
考えられる原因:この Redisson バージョンにはバグがあります。詳細については、GitHub を参照してください。
解決策:Redisson クライアントを 3.11.6 以降に更新します。
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 = "")
Multiple databases are not supported on this server; cannot switch to database
考えられる原因:クラスタインスタンスでは SELECT
コマンドはサポートされていません。
解決策:cluster_compat_enable
パラメーターを 0 に設定して、オープンソース Redis Cluster 構文との互換性を無効にします。次に、クライアントを再起動して、再試行します。詳細については、「インスタンスパラメーターを構成する」をご参照ください。
Error while reading line from the server.
考えられる原因:読み取りリクエストがタイムアウトしました。スロークエリが進行中である可能性があります。
解決策:タイムアウト期間を延長するか、read_write_timeout
を 0
または -1
に設定します。詳細については、「Predis の質問」をご参照ください。
redis protocol error, got ' ' as reply type byte
考えられる原因:この PhpRedis バージョンにはバグがあります。詳細については、GitHub を参照してください。
解決策:PhpRedis クライアントを最新バージョンに更新します。
panic: got 4 elements in cluster info address, expected 2 or 3
考えられる原因: ご利用の go-redis クライアントのバージョンが Redis 7.0 以降と互換性がありません。詳細については、「GitHub」をご参照ください。
解決策:go-redis 9.0 以降を使用します。
SCAN コマンドが無限ループで実行されるか、空の結果が返されます
考えられる原因:SCAN コマンドによって返される Cursor 値が、JavaScript で正確に表現できる最大の整数値 (Number.MAX_SAFE_INTEGER) を超える可能性があります。これにより、カーソル値が不正確になり、無限ループが発生する可能性があります。詳細については、GitHub を参照してください。
解決策:node-redis クライアントを 5.0.0 以降に更新します。