.net-core中的Stackexchange.Redis超时异常

Jaw*_*wen 6 .net c# stackexchange.redis asp.net-core-mvc .net-core

我正在将net 4库移植到net-core 1.0.0-preview 2

在开发我的net-core库时使用Stackexchange.Redis版本1.2.1,在net 4版本中使用1.2.0.

在net 4中,我的库在调用Redis命令时从未失败过.

在net-core中,我随机得到这个错误:

 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)
Run Code Online (Sandbox Code Playgroud)

更新我正在使用默认配置(连接超时,连接重试等)

更新添加了保持活动配置但仍然失败

有任何想法吗?

小智 5

更新的 SyncTimeout 不是一个好的选择,因为您的 redis 命令运行速度非常慢。超时的原因是线程池中的 .net-core 默认线程数太低。

只需在环境变量中设置 maxThreads 即可。

前任:

ComPlus_ThreadPool_ForceMaxWorkerThreads 1000 ComPlus_ThreadPool_ForceMinWorkerThreads 50

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

这对我有用


Jaw*_*wen 4

解决方案:将 SyncTimeout 配置更新为 10000。尝试使用 5000 并失败,然后使用 10000 并修复。默认值为 1000。

  • 你能告诉我这个配置放在哪里吗? (2认同)