2017-03-22 130 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

然后运行在管理员身份的应用程序(允许应用程序读取系统环境变量)

它的工作对我来说