2024年2月、StackExchange.Redisコミュニティは、StackExchange.Redisクライアントを使用して、マルチデータベースサポートが有効になっているプロキシモードの ApsaraDB for Redisインスタンスにアクセスしたときにタイムアウトエラーが発生するバグを修正しました。 StackExchange.Redisを2.7.20以降に更新して問題を解決できます。
詳細
影響範囲
次の条件をすべて満たすと、タイムアウトエラーが発生します。
StackExchange.Redisクライアントのバージョンが2.7.20より前です。
Redisインスタンスは、プロキシモードのクラスターインスタンスまたは読み書き分離インスタンスです。
SELECTコマンドを使用して、複数のデータベースを切り替えます。
サンプルエラー
1. StackExchange.Redis.RedisTimeoutException: Timeout performing xxx (5000ms), inst: 0, qu: 0, qs: 0, aw: False, rs: ReadAsync, ws: Idle, in: 0, in-pipe: 0, out-pipe: 0, serverEndpoint: XX.XX.XX.XX:6379, mgr: 10 of 10 available, clientName: 67c80fdab92d, PerfCounterHelperkeyHashSlot: 11235, IOCP: (Busy=0,Free=1000,Min=12,Max=1000), WORKER: (Busy=18,Free=32749,Min=12,Max=32767), v: xx.y.xx.xxx (Please take a look at this article for some common client-side issues that can cause timeouts: https://stackexchange.github.io/StackExchange.Redis/Timeouts)
2. Multiple databases are not supported on this server; cannot switch to database
に切り替えることはできません
原因
オープンソースのRedisクラスターは、複数のデータベースをサポートしません。 インスタンスをマスターレプリカアーキテクチャからクラスターアーキテクチャに切り替えた後は、SELECTコマンドを実行できません。 ただし、プロキシモードの ApsaraDB for Redisインスタンスは複数のデータベースをサポートしています。 プロキシモードでは、クラスターまたは読み書き分離インスタンスでSELECTコマンドを実行して、別のデータベースに切り替えることができます。 この機能を使用して、スタンドアロンインスタンスをクラスターまたは読み書き分離インスタンスにアップグレードできます。 詳細については、「」「プロキシノードの機能」をご参照ください。
2.7.20より前のStackExchange.Redisバージョンは、Alibaba Cloud Redisのプロキシノードをクラスターと誤認しています。 そのため, SELECTコマンドは実行できません。 この問題はStackExchange.Redis 2.7.20で修正されました。
解決策
StackExchange.Redisを2.7.20以降に更新します。