0

我在我的 mvc 应用程序中缓存查找数据,我有以下代码:

  // GET: Category Types 
        public JsonResult GetAuditGrants(int auditID)
        {
            AuditDAL ad = new AuditDAL();
            if (System.Web.HttpContext.Current.Cache["AuditGrants"] == null)
            {
                System.Web.HttpContext.Current.Cache["AuditGrants"] = ad.GetAuditIssueGrants(auditID);
            }
            var types = (IEnumerable<Grant>)System.Web.HttpContext.Current.Cache["AuditGrants"];
            return this.Json(types.ToList());
        }

如果没有设置过期,默认缓存中的数据什么时候过期?是否建议将其存储在 webconfig 中以确保我的应用程序中查找数据的一致性?

4

1 回答 1

0

要回答您的第一个问题,我们可以咨询 MSDN。根据其文档,使用Item属性(或索引器)添加对象相当于调用该Insert方法,其文档指出:

使用 Insert 方法的此重载添加到缓存中的对象在插入时没有文件或缓存依赖关系,优先级为 Default,滑动过期值 NoSlidingExpiration,绝对过期值 NoAbsoluteExpiration。

您的第二个问题确实非常特定于应用程序。最佳实践是分析您的应用程序。如果您的应用程序遇到大量缓存未命中并且您的缓存仍然很小,那么您可能希望通过使用提供控制权的AddInserts重载之一来延长到期滑动窗口。在这种情况下,将您选择的参数存储在应用程序设置中似乎是个好主意。

但是,要记住有关此缓存的一件事:它是每个应用程序域。如果您有多个 Web 前端,或者甚至配置为为您的应用程序启动多个工作进程的 IIS 服务器,那么您可能无法充分利用缓存策略。在这种情况下,您可能需要使用可以为应用程序的多个实例提供持久性的东西。我们使用 Redis,但还有许多其他选择。

于 2014-01-24T01:19:24.513 回答