【问题标题】:Automatically refresh ASP.NET Output Cache on expiry过期时自动刷新 ASP.NET 输出缓存
【发布时间】:2014-08-03 15:07:41
【问题描述】:

我有一些昂贵的页面,我使用 ASP.NET 输出缓存来缓存它们,

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

显然,缓存将在 3600 秒(1 小时)后过期,而下一个碰巧加载该页面的可怜人将不得不等待缓存从数据库中刷新。

我的问题是,如何让缓存在到期时立即刷新?这样当缓存刚刚过期时,下一个碰巧访问该页面的人就不必等待缓存刷新,而是使用新的缓存提供服务?

更新:我需要非常频繁地更新缓存(1 小时到 3 小时),因为我也不希望数据过时太久。

【问题讨论】:

  • 为什么不将持续时间设置为 Int.Max?
  • 您好问题已更新以解决您的问题。时间。

标签: asp.net asp.net-mvc caching asp.net-mvc-5


【解决方案1】:

我不认为,您只需使用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);
    }
}

【讨论】:

  • 这是解决我的需求的一种有趣方式。如果没有其他优雅的方法,我可能会考虑这一点。谢谢。
猜你喜欢
  • 1970-01-01
  • 2017-07-21
  • 2015-11-25
  • 2010-09-27
  • 2013-02-10
  • 1970-01-01
  • 1970-01-01
  • 2019-07-05
  • 2013-09-14
相关资源
最近更新 更多