2024年02月,StackExchange.Redis社區修複了一個Bug:在使用StackExchange.Redis用戶端訪問代理(Proxy)模式的Tair執行個體時,如果使用了多資料庫(Database,DB)功能,會出現逾時報錯。請將StackExchange.Redis升級至2.7.20及以上版本,可解決該問題。
詳細資料
影響範圍
當同時滿足以下三種情況時,會出現逾時報錯:
StackExchange.Redis用戶端版本低於2.7.20(不包含)。
Tair執行個體為叢集架構代理模式或讀寫分離架構。
使用多DB功能,即使用了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叢集不支援多DB功能,使用者在從主備架構變更配置至叢集架構後,無法執行SELECT命令。而Tair的代理模式支援多DB功能。通過代理模式,您可以在叢集架構、讀寫分離架構中使用SELECT命令,切換至其他DB。該功能可以協助您更平滑地從單機版升級至叢集架構或讀寫分離架構,更多資訊請參見Tair Proxy特性說明。
StackExchange.Redis 2.7.20(不包含)之前的版本在識別阿里雲Tair的代理節點時,將其識別為Cluster,從而導致SELECT命令無法執行,該問題已經在StackExchange.Redis 2.7.20版本進行了修複。
解決方案
將StackExchange.Redis升級至2.7.20及以上版本。