刷新旧的缓存数据

时间:2011-12-24 19:25:55

标签: c# asp.net asp.net-mvc asp.net-mvc-3 outputcache

我的Outputcache属性高于ASP.NET MVC 3应用程序中的一个控制器操作:

[OutputCache(Duration=86400)] // One day
public JsonResult GetCompanyName(int companyId)
{
    var company = _session.Get<Company>(companyId);

    if (company == null)
        throw new Exception();

    return Json(company.Name);
}

缓存背后的原因是我们支持的公司不会经常更改,因此我们不需要使用相同的参数查询每个HttpRequest的数据库。

如果我们添加一家新公司,我该如何强制“重新检查”? 是否可以仅对此操作执行操作,或者我必须删除所有应用缓存?

更新:我的数据库为Oracle,我的ORM为NHibernate

1 个答案:

答案 0 :(得分:1)

您可以使用RemoveOutputCacheItem方法。所以我们假设您已经调用了这样的方法来获取公司:

/somecontroller/getcompanyname/123

为了使这个url从缓存中过期,以便下次调用它时会得到新的结果:

public ActionResult Expire()
{
    Response.RemoveOutputCacheItem("/somecontroller/getcompanyname/123");
    return Content("The cache was expired for the company with id = 123");
}

但恕我直言,对于这种情况,最好使用NHibernate的二级缓存来缓存结果,而不是使用OutputCache属性缓存整个操作。此操作所做的就是返回来自数据库的JSON序列化对象。什么是昂贵的不是动作调用而是数据库调用。因此,只缓存此数据库调用的结果(使用ORMs缓存或系统缓存提供程序),因为这将为您提供对此缓存的到期策略的更强大的控制。

相关问题