如何使用 StackExchange.Redis 解决客户端 Redis 超时问题?

Dyp*_*pso 3 c# timeout stackexchange.redis

我在 ac# wcf 应用程序中使用 StackExchange.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) 
Run Code Online (Sandbox Code Playgroud)

如果我理解正确,这意味着我的获取值已排队,因为有五个工作线程?使用 netstat,我看到我的应用程序正在打开两个到服务器的物理连接。我已确保线程池中有足够的可用线程。在我的连接设置中,我有一个syncTimeout=3000...如果我使用redis-cli,我可以在0.64秒内获取密钥的值。

有人可以帮忙吗?我能做些什么?我是否必须在代码中一直使用异步或找到另一个 redis 客户端库?

小智 5

从“WORKER: (Busy=5,Free=795,Min=8,Max=800)”中,我看到有 5 个 Busy 工作线程,最少只有 8 个工作线程。我怀疑如果您查看收到的整个错误集,您可能会发现在某些情况下 Busy 大于 Min 计数。这表明线程池受到限制。该链接还提供了一些有关增加工作线程和 IOCP 线程的最小线程数的解决方案。

  • 你不知道这个答案对我有多大帮助。谢谢你! (2认同)