5

我有下面的代码,并希望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();
        }
    }
}
4

1 回答 1

8

要更改持续时间,请执行以下操作:

如何在输出缓存中使用动态持续时间值? (请注明原作者)

我将从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();
}

然后您可以Duration通过CacheConfig.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

于 2017-10-02T00:32:40.733 回答