Обновить старые кэшированные данные - PullRequest
0 голосов
/ 24 декабря 2011

У меня есть атрибут 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 Ответ

1 голос
/ 26 декабря 2011

Вы можете использовать метод 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");
}

Но IMHO для этого сценария было бы лучше использовать кэш второго уровня NHibernate для кэширования результатов, а не кэшировать все действие с атрибутом OutputCache.Все, что делает это действие - возвращает сериализованный объект JSON, полученный из базы данных.Дорого стоит не вызов действия, а вызов базы данных.Поэтому кэшируйте только результаты этого вызова базы данных (используя кеш ORM или поставщиков системного кэша), так как это обеспечит вам более надежный контроль над политиками истечения срока действия этого кэша.

...