HttpContext.Cache Expiration - PullRequest
       13

HttpContext.Cache Expiration

33 голосов
/ 12 июня 2009

Можно ли указать, как долго данные хранятся в HttpContext.Cache?

Ответы [ 3 ]

33 голосов
/ 12 июня 2009

Вы можете указать это в 4-м параметре Cache.Add():

public Object Add(
    string key,
    Object value,
    CacheDependency dependencies,
    DateTime absoluteExpiration,  // After this DateTime, it will be removed from the cache
    TimeSpan slidingExpiration,
    CacheItemPriority priority,
    CacheItemRemovedCallback onRemoveCallback
)

Edit:

Если вы обращаетесь к кешу через индексатор (т. Е. Cache["Key"]), вызываемый метод не использует срок действия и остается в кеше бесконечно.

Вот код, который вызывается при использовании индексатора:

public void Insert(string key, object value)
{
    this._cacheInternal.DoInsert(true, key, value, null, NoAbsoluteExpiration, NoSlidingExpiration, CacheItemPriority.Normal, null, true);
}
16 голосов
/ 12 июня 2009

Используйте метод Cache.Add, например: -

 HttpContext.Cache.Add("mykey", someObj, null, Cache.NoAbsoluteExpiration, new TimeSpan(0, 15, 0), CacheItemPriority.Normal, null);

Срок действия выше истекает через 15 минут после последнего обращения к нему. В качестве альтернативы вы можете передать Cache.NoSlidingExpiration этому параметру и использовать определенный DateTime в предыдущем параметре.

4 голосов
/ 11 июля 2009

Да, есть способ указать, как долго данные хранятся в Cache, но ни один из предыдущих 2-х примеров не гарантировал бы, что вы будете хранить ваши вещи в течение ожидаемого количества времени, прошедшего с любым из двух основанных на времени параметры метода Add (абсолютное или скользящее истечение).

Кеш - это просто кеш, и его цель - ускорить процесс. Поэтому не следует ожидать, что они сохранят ваши данные и всегда будут готовы извлечь их, если их там нет.

Как вы, вероятно, знаете, у вас могут быть зависимости для элементов, и они истекают на основании этого, даже если время не истекло. Это простая концепция, но есть и другая, не такая простая. Приоритет.

Исходя из приоритета ваших предметов и в сочетании с нехваткой памяти, вы можете оказаться в ситуации, когда вы кешируете данные с достаточным временем истечения срока действия, основанным на ваших вычислениях, но вы больше не сможете использовать эти данные чем один раз сделать ваш кэш просто накладные расходы в такой ситуации.

РЕДАКТИРОВАТЬ: Ну, я забыл указать фактический способ сохранить элемент в течение необходимого вам времени, и это продукт выбора желаемого срока действия, никакой зависимости вообще, не удаления вручную и используя приоритет NotRemovable. Это также, как состояние сеанса inproc внутренне сохраняется в кэше httpruntime.

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