首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >刷新旧缓存数据

刷新旧缓存数据
EN

Stack Overflow用户
提问于 2011-12-24 19:25:54
回答 1查看 385关注 0票数 0

在ASP.NET MVC 3应用程序中,我的控制器操作之一上面有Outputcache属性:

代码语言:javascript
复制
[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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-12-26 08:24:49

您可以使用RemoveOutputCacheItem方法。因此,假设您调用了这样的方法来获取公司:

代码语言:javascript
复制
/somecontroller/getcompanyname/123

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

代码语言:javascript
复制
public ActionResult Expire()
{
    Response.RemoveOutputCacheItem("/somecontroller/getcompanyname/123");
    return Content("The cache was expired for the company with id = 123");
}

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8626466

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档