2017-03-22 171 views
4

我移植網4庫網核心1.0.0預覽2Stackexchange.Redis超時異常

發展我的NET-當使用Stackexchange.Redis 1.2.1版核心庫,以及淨4版本的1.2.0。

在net 4中,我的庫在調用Redis命令時從未失敗過。

在網絡核心,我得到這個錯誤隨機:

System.TimeoutException: Timeout performing GET netkey, inst: 6, queue: 10, qu: 0, qs: 10, qc: 0, wr: 0, wq: 0, in: 645, ar: 0, clientName: XXXXXX, serverEndpoint: Unspecified/XXXXXXX, keyHashSlot: XXXXX(Please take a look at this article for some common client-side issues that can cause timeouts: https://github.com/StackExchange/StackExchange.Redis/tree/master/Docs/Timeouts.md) 
    at StackExchange.Redis.ConnectionMultiplexer.ExecuteSyncImpl[T](Message message, ResultProcessor`1 processor, ServerEndPoint server) 
    at StackExchange.Redis.RedisBase.ExecuteSync[T](Message message, ResultProcessor`1 processor, ServerEndPoint server) 
    at StackExchange.Redis.RedisDatabase.StringGet(RedisKey key, CommandFlags flags) 

UPDATE我使用默認配置(連接超時,連接重試等)

UPDATE新增備存─活着的配置,但仍然失敗

任何想法?

+0

它在重試運行? – BrokenGlass

+0

@BrokenGlass是的,默認值「3」(次) – Jawen

回答

2

解決方法:將SyncTimeout配置更新爲10000.嘗試使用5000並失敗,然後使用10000和固定值。默認值是1000.

0

您是否嘗試過使用可用的線程? (請注意,這不是從.NET核心項目,所以我不是100%肯定的語法是一樣的。)

我有以下我Application_Start方法中的Global.asax.cs

private static int THREAD_MIN = 50; // 4 cores in production = 200 
...     
//Per Redis docs, upping the number of threads available to handle the IO demands on the cloud. 
//https://github.com/StackExchange/StackExchange.Redis/blob/master/Docs/Timeouts.md 
ThreadPool.SetMinThreads(THREAD_MIN, THREAD_MIN);  
+0

對不起,它沒有幫助。我不能在網絡核心中使用這種方法。試過另一種解決方案。 – Jawen

0

更新的SyncTimeout不是一個好選擇,因爲您的redis命令運行速度非常慢 超時的原因是.net-core默認線程數在threadpool中過低。

只需在環境變量中設置maxThreads即可。

例如:

ComPlus_ThreadPool_ForceMaxWorkerThreads 1000 ComPlus_ThreadPool_ForceMinWorkerThreads 50

然後運行在管理員身份的應用程序(允許應用程序讀取系統環境變量)

它的工作對我來說