我正在尝试使用StackExchange Redis库跟踪间歇性的"突发"超时.以下是我们的设置:我们的API是用C#编写的,可以在Windows 2008和IIS上运行.我们有4台API服务器在生产中,我们有4台Redis机器(运行Linux最新LTS),每台机器有2个Redis实例(一个主机在端口7000上,一个从机在端口7001上).我几乎看过Redis服务器的各个方面,看起来很棒.日志,CPU和网络中的错误都不是很好,服务器方面的一切看起来都很棒.我可以tail -f在发生这种情况时使用Redis记录并且看不到任何异常(例如重写AOF文件或任何其他内容).我认为问题不在于Redis.
这是我目前所知道的:
这是一个示例超时异常.大多数看起来与此基本相同:
Type = StackExchange.Redis.RedisTimeoutException,Message = Timeout执行GET limeade:allActivities,inst:1,mgr:ExecuteSelect,err:never,queue:0,qu:0,qs:0,qc:0,wr:0,wq :0,in:0,ar:0,clientName:LIMEADEAPI4,serverEndpoint:10.xx.xx.11:7000,keyHashSlot:1295,IOCP :( Busy = 0,Free = 1000,Min = 2,Max = 1000) ,WORKER :(忙碌= 9,自由= 32758,最小值= 2,最大值= 32767)(请查看本文,了解可能导致超时的一些常见客户端问题:http: //stackexchange.github.io/ StackExchange.Redis /超时),堆栈跟踪= 在StackExchange.Redis.ConnectionMultiplexer.ExecuteSyncImpl [T](消息消息,ResultProcessor
1 processor, ServerEndPoint server) at StackExchange.Redis.ConnectionMultiplexer.ExecuteSyncImpl[T](Message message, ResultProcessor1个处理器,ServerEndPoint服务器)在StackExchange.Redis.RedisBase.ExecuteSync [T](消息消息,ResultProcessor1 processor, ServerEndPoint server) at StackExchange.Redis.RedisDatabase.StringGet(RedisKey key, CommandFlags flags) at Limeade.Caching.Providers.RedisCacheProvider1.Get [T](K cacheKey,CacheItemVersion和cacheItemVersion)在......
我已经做了一些关于追踪这些超时异常的研究,但令人惊讶的是所有数字都是零.队列中没有任何东西,没有等待处理的东西,我有大量的线程免费,没有做任何事情.一切看起来都很棒.
任何人都有任何想法如何解决这个问题?问题是这些缓存超时突发导致我们的数据库受到更多打击,在某些情况下这是一件坏事.我很乐意添加任何人都会发现有用的信息.
更新:连接代码
连接到Redis的代码是支持各种缓存环境和配置的相当复杂的系统的一部分,但我可以将其归结为基础知识.首先,有一个CacheFactory …