在ASP.NET MVC 3应用程序中,我的控制器操作之一上面有Outputcache属性:
[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
发布于 2011-12-26 08:24:49
您可以使用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缓存或系统缓存提供程序),因为这将为您提供对该缓存过期策略的更健壮的控制。
https://stackoverflow.com/questions/8626466
复制相似问题