[英]How can I use [OutputCache (Duration=2000)] with variable duration value and reset Server cache
我有下面的代碼,並且希望Duration
在[OutputCache(Duration = 10)]
線為具有可變值,這樣我可以從閱讀DB
或從List
集合。
我希望能夠在Duration
發生變化時立即重置服務器緩存。
怎樣才能讓Duration
多樣和重置緩存HTML
當數據Duration
被改變? 這是我的代碼。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
namespace Cache_Example.Controllers
{
public class HomeController : Controller
{
// GET: Home
// [OutputCache(Duration = 10)]
public ActionResult Index()
{
return View();
}
[OutputCache(Duration = 10)]
public ActionResult ShowDate()
{
return PartialView();
}
}
}
要更改持續時間,請按照以下步
如何在輸出緩存中使用動態持續時間值? (請信用原作者)
我將繼承
OutputCache
屬性並在那里設置Duration
:
public static class CacheConfig
{
public static int Duration = 36600;
}
public class MyOutputCacheAttribute : OutputCacheAttribute
{
public MyOutputCacheAttribute()
{
this.Duration = CacheConfig.Duration;
}
}
[MyOutputCache(VaryByParam = "none")]
public ActionResult Index()
{
return View();
}
然后,您可以通過CacheConfig.Duration
動態地和全局地更改Duration
如果需要,您仍然可以覆蓋每個操作的全局設置:
[MyOutputCache(Duration = 100, VaryByParam = "none")]
public ActionResult OtherAction()
{
return View();
}
然后,當Duration自己更改時,您可以立即重置服務器緩存。 這是如何做:
“ASP.NET緩存對象位於System.Web命名空間中,並且因為它是通用緩存實現,所以它可以在任何引用此命名空間的應用程序中使用。
System.Web.Caching.Cache類是對象的緩存。 可以通過靜態屬性System.Web.HttpRuntime.Cache或通過輔助實例屬性System.Web.UI.Page和System.Web.HttpContext.Cache訪問它。 因此,它可以在請求的上下文之外使用。 整個應用程序域中只有一個此對象的實例,因此HttpRuntime.Cache對象可以存在於Aspnet_wp.exe之外的每個應用程序域中。
以下代碼顯示了如何從通用應用程序訪問ASP.NET緩存對象。
HttpRuntime httpRT = new HttpRuntime();
Cache cache = HttpRuntime.Cache;
在訪問當前請求的緩存對象后,您可以按常規方式使用其成員。“
REF:過時的MSDN源: .NET Framework應用程序的緩存體系結構指南
注意:使用.Net 3.5,您只能使用InProc緩存,使用.NET 4,您可以在進程外部存儲緩存以及使用自定義CacheProviders 。
我想強調一點,如果緩存應該比AppPool循環使用的時間更長(例如每天),那么你需要緩存Out-Of-Process。
還要檢查它是否在服務器上緩存: http : //msdn.microsoft.com/en-us/library/system.web.ui.outputcachelocation.aspx
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.