ASP.NET输出缓存过期后自动刷新

3

我有一些昂贵的页面,使用ASP.NET输出缓存进行缓存,如下所示:

[OutputCache(Duration=3600, VaryByParam = "none")]

显然,缓存将在3600秒(1小时)后过期,下一个倒霉的人加载该页面时必须等待缓存从数据库中刷新。
我的问题是,如何使缓存在到期后立即刷新?这样,当缓存刚刚过期时,下一个访问该页面的人将不必等待缓存被刷新,而是得到新的缓存?
更新:我需要缓存更新得相当频繁(每1小时至3小时),因为我也不想数据太长时间变得陈旧。

1
为什么不把持续时间设为 Int.Max? - Uriil
嗨,问题已更新以回答您的问题。谢谢。 - Rosdi Kasim
1个回答

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);
    }
}

这是一个有趣的解决我的需求的方式。如果没有其他更优雅的方法,我可能会考虑使用它。谢谢。 - Rosdi Kasim

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接