[英]ASP.NET Cache - long running operation
我将数据存储在缓存中是为了避免持续访问数据库(数据是否过时也没关系),数据集不是特别大,但是由于查询的复杂性,操作可能需要一些时间(大量的联接和子查询)。 我有一个静态的帮助程序类,该数据用于在各个页面上进行绑定。 该页面的调用方式如下:
public static List<MyList> MyDataListCache
{
get
{
var myList = HttpContext.Current.Cache["myList"];
if (myList == null)
{
var result = MyLongRunningOperation();
HttpContext.Current.Cache.Add("myList", result, null, DateTime.Now.AddMinutes(3),
Cache.NoSlidingExpiration, CacheItemPriority.Normal, null);
return result;
}
}
else
{
return (List<MyList>)myList;
}
}
}
除非很多人在该项目不在缓存中时同时点击该页面,否则此方法就很好。 数百个LongRunningOperations被旋转并导致应用程序崩溃。 如何避免这个问题? 我尝试使用异步任务来订阅该任务是否正在运行,但是没有运气。
启动此服务后,应立即调用LongRunningOperation()来预热缓存。
其次,您始终希望返回某些内容,因此我将考虑执行后台任务以在此缓存过期之前刷新该缓存。
做到这两点会使您所描述的情况无效。 缓存将由后台工作人员刷新,因此每个人都很高兴:)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.