gpt4 book ai didi

c# - Stackexchange.Redis 超时和套接字故障

转载 作者:IT王子 更新时间:2023-10-29 06:03:58 24 4
gpt4 key购买 nike

我使用 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

我猜测设置对象花费的时间比预期的要长,这可能是由于对象很大,所以我可能会增加同步超时,但这会隐藏一些其他问题吗?

我只在同步调用 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 来序列化我的对象

最佳答案

超时通常是由以下几种原因之一引起的。以下是一些示例

  1. 客户端或服务器 CPU 达到 100%
  2. 线程池设置配置不当,加上流量激增
  3. 客户端向服务器发送昂贵的命令。
  4. 最大化网络带宽(在客户端或服务器上)

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

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

我还建议升级到较新版本的 StackExchange.Redis。版本 1.1.603 在超时错误消息中包含一些更详细的诊断信息,可以帮助您识别我上面列出的一些常见客户端内容。

对于套接字故障,我见过的客户端和服务器之间连接丢失的几个常见原因是:

  1. 扩展客户端 - 在 Azure 中扩展客户端应用程序时,我发现了短暂的客户端连接问题。
  2. 当Redis打补丁时,会出现一些连接问题。 Azure Redis 修补说明如下:https://gist.github.com/JonCole/317fe03805d5802e31cfa37e646e419d

关于c# - Stackexchange.Redis 超时和套接字故障,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30811020/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com