我有几个昂贵的页面,我使用ASP.NET输出缓存缓存,如此,
[OutputCache(Duration=3600, VaryByParam = "none")]
显然,缓存将在3600秒(1小时)后过期,而下一个正好加载该页面的穷人将不得不等待缓存从dabatase刷新。
我的问题是,如何在到期时立即刷新缓存?那么当缓存刚刚过期时碰巧访问该页面的下一个人不必等待刷新缓存,而是使用新的缓存服务?
更新:我需要经常更新缓存(1小时到3小时),因为我不希望数据过时太久。
答案 0 :(得分:2)
我认为,只使用OutputCache
即可实现所需。
基本上你需要数据存储和工作人员。对于存储,您可以使用从静态变量到外部数据库的任何内容。
与工人一样。它可能只是简单的长时间运行任务或外部服务。基本样本,这样你就可以了解我在说什么
public class TestController : Controller
{
private static int _result = 0;
static TestController()
{
Task.Factory.StartNew(async () =>
{
while (true)
{
await Task.Delay(new TimeSpan(0, 0, 5));
_result++;
}
}, TaskCreationOptions.LongRunning);
}
public ActionResult Index()
{
return Json(_result, JsonRequestBehavior.AllowGet);
}
}