StackExchange.Redis timeout异常 解决方案

公司项目使用了redis作为缓存数据库,在网上看了很多文章,都指出StackExchange.Redis最好使用单例模式,然而在实际 项目使用过程中,捕捉到timeout事件,如下:

1
Timeout performing EXISTS UserKey-36700, inst: 1, queue: 1, qu: 0, qs: 1, qc: 0, wr: 0, wq: 0, in: 4, ar: 0, clientName: , serverEndpoint: 10.66.205.72:6379, keyHashSlot: 15122 (Please take a look at this article for some common client-side issues that can cause timeouts: http://stackexchange.github.io/StackExchange.Redis/Timeouts)

根据异常提到的连接:
http://stackexchange.github.io/StackExchange.Redis/Timeouts)
以及在网上查找StackExchange.Redis timeout相关的文章,发现其中两点个解决方法(也是官方提出的方式):

  1. 使用ConnectionMultiplexer Pool

    客户端中使用 ConnectionMultiplexer 对象池,并在发送新请求时选择“最小化加载”ConnectionMultiplexer。 这样可能会防止单个超时导致其他请求也超时。客户端中使用 ConnectionMultiplexer 对象池,并在发送新请求时选择“最小化加载”ConnectionMultiplexer。 这样可能会防止单个超时导致其他请求也超时。

  2. 修改线程池的最小设置

    建议将 IOCP 和 WORKER 线程的最小配置值设置为大于默认值的值。 我们不能给出一个大小适合所有指导这个值应该是什么,因为一个应用程序的正确价值将太高/低为另一个应用程序。
    此设置也会影响复杂应用程序的其他部分的性能,因此您需要根据您的特定需求调整此设置。
    一个好的起点是200或300,然后根据需要进行测试和调整。
    调整方式:System.Threading.ThreadPool.SetMinThreads(200, 200);


附上官方文档中文译文

https://www.jianshu.com/p/4dc1ad0abc1c