Подтвердить что ты не робот

Истечение срока действия HttpContext.Cache

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

4b9b3361

Ответ 1

Вы можете указать его в 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);
}

Ответ 2

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

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

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

Ответ 3

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

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

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

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

EDIT: Ну, я забыл указать фактический способ действительно сохранить элемент в течение необходимого вам времени, а также то, что продукт для выбора желаемого истечения по времени, никакой зависимости вообще, а не вручную удалить его, и с использованием приоритета NotRemovable. Это также то, как состояние сеанса inproc внутренне хранится в кете httpruntime.