Вы можете указать его в 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
)
Если вы обращаетесь к кешу через индексатор (т.е. Cache ["Key"]
), вызываемый метод не имеет срока действия и остается в кеше неопределенное время.
Вот код, который вызывается при использовании индексатора:
public void Insert(string key, object value)
{
this._cacheInternal.DoInsert(true, key, value, null, NoAbsoluteExpiration, NoSlidingExpiration, CacheItemPriority.Normal, null, true);
}
Используйте метод Cache.Add, например: -
HttpContext.Cache.Add("mykey", someObj, null, Cache.NoAbsoluteExpiration, new TimeSpan(0, 15, 0), CacheItemPriority.Normal, null);
Срок действия указанного выше истекает через 15 минут после последнего обращения к нему. В качестве альтернативы вы можете передать Cache.NoSlidingExpiration этому параметру и использовать конкретный DateTime в предыдущем параметре.
Да, есть способ указать, как долго данные хранятся в кэше, но ни один из двух предыдущих примеров на самом деле не гарантирует, что вы будете хранить свои элементы в течение ожидаемого времени, прошедшего с любым из двух основанных на времени параметры метода Add (абсолютное или скользящее истечение срока действия).
Кэш - это просто кеш, и его цель - ускорить работу. Так что не следует ожидать, что он будет хранить ваши данные, и всегда быть готовым получить их, если их там нет.
Как вы, вероятно, знаете, у вас могут быть зависимости для элементов, и они истекают в зависимости от этого, даже если время не истек. Это простая концепция, но есть и другая, не такая простая. Приоритет.
Исходя из приоритета ваших задач и в сочетании с давлением памяти, вы можете оказаться в ситуации, когда вы ' повторное кэширование данных с достаточно хорошим временем истечения срока действия на основе ваших расчетов, но вы не можете использовать эти данные более одного раза, что делает ваш кеш просто накладными расходами в такой ситуации.
РЕДАКТИРОВАТЬ: Ну, я забыл указать фактический способ действительно храните элемент в течение необходимого времени, и это результат выбора желаемого срока действия, основанного на времени, без каких-либо зависимостей, без его ручного удаления и использования приоритета NotRemovable. Таким же образом внутреннее состояние сеанса inproc хранится в кэше httpruntime.
Это продукт выбора желаемого срока действия, основанного на времени, без зависимости, без ручного удаления и использования приоритета NotRemovable. Таким же образом внутрипроцессное состояние сеанса хранится в кэше httpruntime. Это продукт выбора желаемого срока действия, основанного на времени, без зависимости, без ручного удаления и использования приоритета NotRemovable. Таким же образом внутреннее состояние сеанса inproc хранится в кэше httpruntime.