RPM*_*984 11 asp.net asp.net-mvc caching .net-4.0 asp.net-mvc-3
我有一个ASP.NET MVC 3/.NET Web应用程序,它是大量数据驱动的,主要围绕"地点"(纽约,加利福尼亚等)的概念.
无论如何,我们有一些非常繁忙的数据库查询,它们在完成后会被缓存.
例如:
public ICollection<Location> FindXForX(string x)
{
var result = _cache.Get(x.ToKey()) as Locaiton; // try cache
if (result == null) {
result = _repo.Get(x.ToKey()); // call db
_cache.Add(x.ToKey(), result); // add to cache
}
return result;
}
Run Code Online (Sandbox Code Playgroud)
但我不想让不幸的第一个用户等待这个数据库调用.
数据库调用可能需要40-60秒,远远超过ASP.NET请求的默认超时.
当我的应用程序启动时或之后不久,我想对某些"热门"位置(例如纽约,加利福尼亚州)的这些调用进行"预热".
我不想简单地在Global asax(Application_Start)中执行此操作,因为应用程序启动时间太长.(我计划在15个地点预先缓存,这样几分钟的工作).
有什么办法可以异步启动这个逻辑吗?也许旁边的服务是更好的选择?
我能想到的唯一其他选择是有一个管理页面,其中包含这些操作的按钮.因此,管理员(例如我)可以在应用启动后启动这些查询.这将是最简单的解决方案.
有什么建议?
快速而肮脏的方式是发射一个Task
来自Application_Start
但我发现将这个功能包装到一些基础结构中是很好的,这样你就可以创建一个〜/ Admin/CacheInfo页面来让你监控可能在加载过程中的进度,状态和异常.缓存.