如何使用具有可变持续时间值的 [OutputCache (Duration=2000)] 并重置服务器缓存
How can I use [OutputCache (Duration=2000)] with variable duration value and reset Server cache
我有下面的代码,并希望 [OutputCache(Duration = 10)]
行中的 Duration
有一个变量值,以便我可以从 DB
或 List
集合中读取它.
并且 我希望能够在 Duration
发生更改时立即重置服务器缓存。
如何在 Duration
更改时使 Duration
变化并重置缓存的 HTML
数据?这是我的代码。
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();
}
}
}
要更改持续时间,请执行以下操作:
How to use dynamic duration value in Output Caching?(转载请注明原作者)
I would inherit from the OutputCache
attribute and set the 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();
}
然后您可以在持续时间更改后立即重置服务器缓存。方法如下:
"ASP.NET 缓存对象位于 System.Web 命名空间中,因为它是一个通用的缓存实现,所以它可以在任何引用此命名空间的应用程序中使用。
System.Web.Caching.Cache class是对象的缓存。它可以通过静态 属性 System.Web.HttpRuntime.Cache 或通过辅助实例属性 System.Web.UI.Page 和 System.Web.HttpContext 访问.缓存。因此,它可以在请求的上下文之外使用。该对象在整个应用程序域中只有一个实例,因此 HttpRuntime.Cache 对象可以存在于 Aspnet_wp.exe.
之外的每个应用程序域中
以下代码显示了如何从通用应用程序访问 ASP.NET 缓存对象。
HttpRuntime httpRT = new HttpRuntime();
Cache cache = HttpRuntime.Cache;
访问当前请求的缓存对象后,您可以按常规方式使用其成员。"
REF:过时的 MSDN 来源:Caching Architecture Guide for .NET Framework Applications
注意:对于 .Net 3.5,您只能使用 InProc 缓存,对于 .NET 4,您可以将缓存存储在进程之外,也可以使用自定义 CacheProviders.
我想强调这一点,如果缓存的持续时间应该比 AppPool 回收的时间更长(例如每天),那么您需要缓存 Out-Of-Process。
还要检查它是否缓存在服务器上:
http://msdn.microsoft.com/en-us/library/system.web.ui.outputcachelocation.aspx
我有下面的代码,并希望 [OutputCache(Duration = 10)]
行中的 Duration
有一个变量值,以便我可以从 DB
或 List
集合中读取它.
并且 我希望能够在 Duration
发生更改时立即重置服务器缓存。
如何在 Duration
更改时使 Duration
变化并重置缓存的 HTML
数据?这是我的代码。
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();
}
}
}
要更改持续时间,请执行以下操作:
How to use dynamic duration value in Output Caching?(转载请注明原作者)
I would inherit from the
OutputCache
attribute and set theDuration
:
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();
}
然后您可以在持续时间更改后立即重置服务器缓存。方法如下:
"ASP.NET 缓存对象位于 System.Web 命名空间中,因为它是一个通用的缓存实现,所以它可以在任何引用此命名空间的应用程序中使用。
System.Web.Caching.Cache class是对象的缓存。它可以通过静态 属性 System.Web.HttpRuntime.Cache 或通过辅助实例属性 System.Web.UI.Page 和 System.Web.HttpContext 访问.缓存。因此,它可以在请求的上下文之外使用。该对象在整个应用程序域中只有一个实例,因此 HttpRuntime.Cache 对象可以存在于 Aspnet_wp.exe.
之外的每个应用程序域中以下代码显示了如何从通用应用程序访问 ASP.NET 缓存对象。
HttpRuntime httpRT = new HttpRuntime();
Cache cache = HttpRuntime.Cache;
访问当前请求的缓存对象后,您可以按常规方式使用其成员。"
REF:过时的 MSDN 来源:Caching Architecture Guide for .NET Framework Applications
注意:对于 .Net 3.5,您只能使用 InProc 缓存,对于 .NET 4,您可以将缓存存储在进程之外,也可以使用自定义 CacheProviders.
我想强调这一点,如果缓存的持续时间应该比 AppPool 回收的时间更长(例如每天),那么您需要缓存 Out-Of-Process。
还要检查它是否缓存在服务器上: http://msdn.microsoft.com/en-us/library/system.web.ui.outputcachelocation.aspx