如何使用具有可变持续时间值的 [OutputCache (Duration=2000)] 并重置服务器缓存

How can I use [OutputCache (Duration=2000)] with variable duration value and reset Server cache

我有下面的代码,并希望 [OutputCache(Duration = 10)] 行中的 Duration 有一个变量值,以便我可以从 DBList 集合中读取它.

并且 我希望能够在 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