我有一个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;
}
我不想成为等待这个数据库调用的不幸首位用户。
数据库调用可能需要40-60秒钟,超过ASP.NET请求的默认超时时间。
我希望在我的应用程序启动或之后不久就为某些“热门”位置(例如纽约、加利福尼亚)预先运行这些调用。
我不想简单地在Global.asax(Application_Start)中执行此操作,因为应用程序启动时间太长了。(我计划预缓存大约15个位置,所以这是几分钟的工作。)
有没有什么办法可以异步触发这个逻辑?也许在旁边运行一个服务是更好的选择?
我能想到的唯一其他选择是拥有一个管理页面,该页面具有这些操作的按钮。因此,在应用程序启动后,管理员(例如我)可以触发这些查询。那将是最简单的解决方案。
有什么建议吗?