C# Azure应用程序服务ASP.NET MVC项目中的RedisTimeoutException
我在ASP.NET MVC应用程序中使用RedisessionStateProvider作为会话提供程序时遇到了一个奇怪的问题。 我有下一个代码(简化了一点),它从数据库中获取图像,然后存储到会话中,但若图像已经在会话中,但散列不同,那个么更新存储的图像。如果不是-仅从会话返回图像,而不从DB获取图像C# Azure应用程序服务ASP.NET MVC项目中的RedisTimeoutException,c#,asp.net-mvc,azure,session,redis,C#,Asp.net Mvc,Azure,Session,Redis,我在ASP.NET MVC应用程序中使用RedisessionStateProvider作为会话提供程序时遇到了一个奇怪的问题。 我有下一个代码(简化了一点),它从数据库中获取图像,然后存储到会话中,但若图像已经在会话中,但散列不同,那个么更新存储的图像。如果不是-仅从会话返回图像,而不从DB获取图像 public FileResult GetImage( int entityId, string imageHash) { var stor
public FileResult GetImage(
int entityId,
string imageHash)
{
var storedImage =
this.ImagesList.FirstOrDefault(
i => i.EntityId == entityId);
if (storedImage != null && storedImage.ImageHash == imageHash)
{
return this.File(storedImage.Content, "image/png", "Image.png");
}
//// Here I get image from DB
if (storedImage != null)
{
//// Here I update image stored in Redis if it's changed
}
else
{
//// Here I insert image into Redis
}
return this.File(resizedImage, "image/png", "Image.png");
}
其中this.ImagesList是存储在会话中的图像列表,但因为我使用RedisSessionStateProvider,所以它存储在Redis中。所以我不直接与Redis合作
然后,我在前端中获取图像,将src定义为ImageController的GetImage操作的Url。正如我最后发现的那样,这不是一个好方法,我们将重新制作它,但我想找出超时的原因,因为我们将在应用程序中使用Redis缓存作为会话存储,以满足其他需求
图像大小不大。我不认为有图像1MB。更有可能是最大100Kb
因此,当我加载包含图像(15-20条记录)的记录列表时,我经常会遇到下一个异常:
执行评估超时,指令:7,管理器:不活动,错误:从不,队列:0,
qu:0,qs:0,qc:0,wr:0,wq:0,in:0,ar:0,客户名称:
RD00155D62D65A,serverEndpoint:未指定/…,keyHashSlot:
5043,IOCP:(忙=0,空闲=1000,最小=1,最大=1000),工作者:
(忙=7,闲=8184,最小=1,最大=8191)(请看这篇文章
对于一些可能导致超时的常见客户端问题:
)
我已经阅读了在应用程序中的异常文章和固定线程池中指定的设置IOCP min=20和Workers min=25。但我得到了同样的例外:
引发了类型为“System.Web.HttpException”的异常。超时
正在执行评估,指令:1,经理:不活动,错误:从不,队列:12,qu:0,
qs:12,qc:0,wr:0,wq:0,in:65536,ar:0,客户名称:
RD00155D62D65A,服务器端点:
未指定的/…,keyHashSlot:
5043,IOCP:(忙=1,空闲=999,最小=20,最大=1000),工作者:
(忙=8,闲=8183,最小=25,最大=8191)(请看这篇文章
对于一些可能导致超时的常见客户端问题:
)
我发现可能的问题是异常的下一个属性:
传真:65536
这是根据第条:
你也可以看到:64221。这表示64211字节已被删除
已在内核套接字层接收,但尚未被
应用程序(例如StackExchange.Redis)。这通常意味着
应用程序从网络读取数据的速度不如
服务器正在将其发送给您
但是如何在我的基础设施中处理这个问题——我还不明白