.NET 4.0 Реализация OutputCacheProvider - PullRequest
5 голосов
/ 12 марта 2010

Я проверяю OutputCacheProvider в ASP.NET 4.0 и использую его для хранения выходного кэша в базе данных MongoDb. Я не могу понять цель метода Add, который является одним из методов переопределения для OutputCacheProvider. Метод Add вызывается, когда для VaryByParam установлено что-либо. Итак, если у меня есть VaryByParam = "id", то будет вызван метод Add.

Но после Add также вызывается, и я могу вставить в базу данных MongoDb внутри метода Set.

public override void Set(string key, object entry, DateTime utcExpiry)
{
    // if there is something in the query use the path and query to generate the key 
    var url = HttpContext.Current.Request.Url;

    if (!String.IsNullOrEmpty(url.Query))
    {
        key = url.PathAndQuery;
    }

    Debug.WriteLine("Set(" + key + "," + entry + "," + utcExpiry + ")");  
    _service.Set(
        new CacheItem() { Key = MD5(key), Item = entry, Expires = utcExpiry }
    ); 
}

Внутри метода Set я использую PathAndQuery, чтобы получить параметры QueryString, а затем выполнить MD5 для ключа и сохранить его в базе данных MongoDb.

Кажется, что метод Add будет полезен, если я делаю что-то вроде VaryByParam = "custom" или что-то в этом роде.

Может кто-нибудь пролить свет на метод Add для OutputCacheProvider?

1 Ответ

8 голосов
/ 26 марта 2010

Они похожи, но есть небольшая разница. Просмотр документации MSDN для OutputCacheProvider class

  • Set - "Вставляет указанный вход в выходной кеш, перезаписать запись, если она уже кешируется "
  • Добавить - "Вставки указанная запись в выходной кэш ".

Замечания для «Добавить» продолжают:

"Если уже есть значение в кеш для указанного ключа, поставщик должен вернуть это значение. провайдер не должен хранить данные передается с помощью метода Add параметры. Метод Add сохраняет данные, если его еще нет в кэш. Если данные находятся в кеше, метод Add возвращает его "

Таким образом, для новых значений, которых еще нет в кэше, они будут вести себя одинаково, но там, где значение уже существует, Set обновляет его, тогда как Add оставляет исходное значение без изменений.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...