我有一些昂贵的页面,使用ASP.NET输出缓存进行缓存,如下所示:
[OutputCache(Duration=3600, VaryByParam = "none")]
显然,缓存将在3600秒(1小时)后过期,下一个倒霉的人加载该页面时必须等待缓存从数据库中刷新。
我的问题是,如何使缓存在到期后立即刷新?这样,当缓存刚刚过期时,下一个访问该页面的人将不必等待缓存被刷新,而是得到新的缓存?
更新:我需要缓存更新得相当频繁(每1小时至3小时),因为我也不想数据太长时间变得陈旧。
我有一些昂贵的页面,使用ASP.NET输出缓存进行缓存,如下所示:
[OutputCache(Duration=3600, VaryByParam = "none")]
我认为仅使用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);
}
}