Stackexchange.Redis超时和套接字故障

3

我正在使用Azure Redis(使用Stackexchange.Redis)作为缓存存储,它通常运行良好。但是我偶尔会遇到超时错误,而我无法确定为什么会发生这种情况。

我的redis连接设置:

value="dev.redis.cache.windows.net,ssl=true,password=secret,abortConnect=false,syncTimeout=3000"

我在同一秒钟内收到了所有这些异常(多次调用):[我在GET操作中也会遇到这些异常。几乎所有这些异常都是在StringSet和StringGet上发生的。我很少在HashSets或HashGets上遇到异常]

Timeout performing SET {key}, inst: 1, mgr: ExecuteSelect, queue: 6, qu=0, qs=6, qc=0, wr=0/0, in=0/0
SocketFailure on SET
SocketFailure on SET
No connection is available to service this operation: SET 

我猜测设置对象所需的时间比预期更长,这可能是由于对象过大,因此我可以增加synctimeout,但这是否会隐藏其他问题呢?

我只在对stackexchange.redis进行同步调用时才收到这些异常,当调用异步时我没有看到异常。

堆栈跟踪:

StackExchange.Redis.RedisConnectionException: SocketFailure on SET
   at StackExchange.Redis.ConnectionMultiplexer.ExecuteSyncImpl[T](Message message, ResultProcessor`1 processor, ServerEndPoint server) i
   at StackExchange.Redis.RedisBase.ExecuteSync[T](Message message, ResultProcessor`1 processor, ServerEndPoint server) 
   at StackExchange.Redis.RedisDatabase.StringSet(RedisKey key, RedisValue value, Nullable`1 expiry, When when, CommandFlags flags) 
at calling method

编辑:我正在使用StackExchange.Redis 1.0.414包,并使用MessagePack将我的对象序列化。

2个回答

7

超时通常由以下几种情况引起。以下是一些示例:

  1. 客户端或服务器 CPU 达到 100%
  2. ThreadPool 设置不佳,加上突发流量
  3. 客户端向服务器发送昂贵的命令。
  4. 网络带宽达到最大值(在客户端或服务器上)

客户端问题的提示:https://gist.github.com/JonCole/db0e90bedeb3fc4823c2

服务器问题的提示:https://gist.github.com/JonCole/9225f783a40564c9879d

我建议您升级到 StackExchange.Redis 的新版本。版本 1.1.603 在超时错误消息中提供了一些更详细的诊断信息,这可能有助于您识别我上面列出的某些常见客户端问题。

至于 Socket 失败,我见过客户端和服务器之间连接断开的几个常见原因:

  1. 扩展客户端 - 我曾经看到在 Azure 中扩展客户端应用程序时会出现短暂的客户端侧连接问题。
  2. 当 Redis 被修补程序修补时,会出现一些连接中断。Azure Redis 修补程序的说明在此处:https://gist.github.com/JonCole/317fe03805d5802e31cfa37e646e419d

0
请检查您运行Redis的端口号。在我的情况下,我的端口号是6359,但实际端口号是6379。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接