我在c#wcf應用程序中使用StackExchange.Redis客戶端:我只使用同步命令來獲取和設置值。問題是我有這種奇怪的日誌超時:如何用StackExchange.Redis解決客戶端的Redis超時問題?
Timeout performing EXISTS DataKey:50,
inst: 1, queue: 1, qu: 0, qs: 1, qc: 0, wr: 0, wq: 0, in: 0, ar: 0, clientName: Machine1,
serverEndpoint: redis-server:6381, keyHashSlot: 7984,
IOCP: (Busy=1,Free=799,Min=8,Max=800),
WORKER: (Busy=5,Free=795,Min=8,Max=800)
(Please take a look at this article for some common client-side issues that can
cause timeouts: http://stackexchange.github.io/StackExchange.Redis/Timeouts)
如果我的理解是正確的就意味着我的GET值進行排隊,因爲有5個工作線程? 使用netstat,我看到我的應用程序正在向服務器打開兩個物理連接。 我已經確保在我的線程池中有足夠多的線程可用。 在我的連接設置中,我有一個syncTimeout = 3000 ... 如果使用redis-cli,我可以在0.64秒內獲得密鑰的值。
任何人都可以幫忙嗎?我能做什麼?我是否必須在代碼中使用異步或查找其他redis客戶端庫?
我已經閱讀了這些解決方案,我會嘗試使用異步版本,然後等待任務...我們不使用異步代碼,因爲我的團隊不熟悉異步/等待模式,並且由於異步性,我們害怕會有很多錯誤......另一方面,調用異步函數並等待它,對我來說似乎很奇怪:這樣做,我會花時間切換另一個線程,等待,然後切換回主線程否? – Dypso
我不確定你的意思,但它與同步函數發生的情況沒有什麼不同。所發生的只是當前線程一直等待,直到調用完成並繼續,但這正是同步調用的情況。 –