Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Redis TimeoutException_C#_.net_Redis - Fatal编程技术网

C# Redis TimeoutException

C# Redis TimeoutException,c#,.net,redis,C#,.net,Redis,我每隔几秒钟就从控制台应用程序向Redis实例推送一些数据。我大致就是这样做的: int foo = GetFoo(); BigObject bar = GetBigObject(); _cache.StringSet("Foo", JsonConvert.SerializeObject(foo)); _cache.StringSet("Bar", JsonC

我每隔几秒钟就从控制台应用程序向Redis实例推送一些数据。我大致就是这样做的:

            int foo = GetFoo();
            BigObject bar = GetBigObject();

            _cache.StringSet("Foo", JsonConvert.SerializeObject(foo));
            _cache.StringSet("Bar", JsonConvert.SerializeObject(bar));
但过了一会儿,我得到了一个例外:

StackExchange.Redis.RedisTimeoutException:“执行设置超时” RTOP信号(5000ms),指令:0,量程:0,qs:0,aw:False,rs: CompletePendingMessage,ws:Idle,in:0,in-pipe:5,out-pipe:0, serverEndpoint:未指定/localhost:5002,管理器:10个中的9个可用, 客户名称:SVGD0083,IOCP:(忙=0,闲=1000,最小=16,最大=1000), 工人:(忙=3,闲=32764,最小=16,最大=32767),v:2.0.593.37019(请 请阅读本文,了解一些常见的客户端问题 可能导致超时: )"

在“链接到”页面中,有人建议该问题可能是由于
线程盗窃
造成的,解决方案是包括以下行:

ConnectionMultiplexer.SetFeatureFlag("preventthreadtheft", true);
问题在于.NET framework中似乎不存在
SetFeatureFlag
方法


有什么想法吗?

StackExchange.Redis不是.net框架的一部分

_缓存可能是StackExchange.Redis.IDatabase对象类型。 因此,只需添加一行代码,在应用程序中初始化redis支持—可能是在startup.cs中。

对象的大小是多少?如果
JsonConvert.SerializeObject(foo)
返回一个500MB的字符串,那么是的:您将度过糟糕的一天

另外,服务器还在做什么?这需要在服务器上进行一些挖掘,但是:redis
SLOWLOG
命令可以为您提供有关长期运行操作的信息。如果有任何事情需要花费很长时间(我会开始对任何超过10毫秒的事情感到不安),那么您的服务器实际上是在暂停,这需要进行调查——但这不是库可以解决的问题

如果您正在与远方的服务器通话,可能需要更长的超时时间


最后,我非常怀疑这个特定场景是否与线程盗窃有关;如果有什么不同的话,那听起来像是你在抓救命稻草(比喻)。但如果
ConnectionMultiplexer.SetFeatureFlag
不存在,则可能使用的是旧库版本。那么:您使用的是什么库版本?

迁移到.NET 5?谢谢您的输入!非常感谢。该对象甚至不接近500MB。最多几个Kb。Redis在docker中运行,编写数据的客户端每隔几秒钟就调用一次StringSet。客户端和Redis都在同一台机器上运行。它实际上已经运行了很长一段时间,没有出现错误,可能只有几个小时