2014-06-13 51 views
2

我有我的緩存使用ASP.NET輸出緩存,像這樣一些昂貴的網頁,自動刷新ASP.NET輸出緩存期滿

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

顯然,緩存將3600秒(1小時)後失效,而下一個可能加載該頁面的可憐人將不得不等待緩存從數據庫中刷新。

我的問題是,如何讓緩存在到期時立即刷新?因此,當緩存剛過期時碰巧訪問該頁面的下一個人不必等待緩存刷新,而是使用新緩存提供服務?

更新:我需要緩存更新很頻繁(1小時到3小時),因爲我不希望數據陳舊太久。

+1

爲什麼不把持續時間設置爲Int.Max? – Uriil

+0

嗨問題更新以解決您的問題。 TQ。 –

回答

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

這是解決我的需求的有趣方式。如果沒有其他優雅的方式,我可能會考慮這一點。謝謝。 –