Элементы в кэше.NET не истекают, как ожидалось
Я не очень хорошо знаю, как именно работает кеш, поэтому надеюсь, что я включу достаточно информации.
По сути, моя проблема в том, что мы кешируем элементы, и они, похоже, хорошо добавляются в кеш, но у них, похоже, нет срока действия или истекает всякий раз, когда они этого хотят. Я не использую скользящий срок действия.
Срок действия предмета, который я тестирую, составляет 300 (5 минут), но через 30 минут он был проверен, но предмет все еще возвращается из кеша. У меня были предметы, которые должны были истечь через день, который все еще показывался через 7 дней. Поэтому наши изменения / правки не отображаются на сайте.
Ниже приведен код, который мы попробовали.
public static void AddtoCache(object objToCache, CacheLevel cacheLevel, string cacheKey)
{
if (objToCache == null)
{
return;
}
if (HttpContext.Current.Cache != null)
{
HttpContext.Current.Cache.Insert(cacheKey, objToCache, null, DateTime.Now.AddSeconds((double)cacheLevel), System.Web.Caching.Cache.NoSlidingExpiration);
}
}
а также:
public static void AddtoCache(object objToCache, CacheLevel cacheLevel, string cacheKey)
{
if (HttpContext.Current.Cache != null)
{
if (HttpContext.Current.Cache[cacheKey] == null)
{
HttpContext.Current.Cache.Add(cacheKey, objToCache, null, DateTime.UtcNow.AddSeconds((double)cacheLevel), TimeSpan.Zero, System.Web.Caching.CacheItemPriority.Default, null);
}
}
}
Это происходит как в разработке, так и в производстве. Мы используем C# на Windows Server 2008 R2 Sp1 с IIS 7.5
ОБНОВЛЕНИЕ: это код, который мы используем, чтобы получить элемент для отображения в случае, если это может быть проблемой.
public static T GetFromCache<T>(string cacheKey)
{
object cachedObj = HttpContext.Current.Cache[cacheKey];
if (cachedObj != null)
{
return (T)cachedObj;
}
return default(T);
}
ОБНОВЛЕНИЕ № 2: Кэшируемые элементы все отображаются с пользовательскими элементами управления.NET (ascx) в случае, если это имеет значение. Мы используем Ektron в качестве нашей CMS.
ОБНОВЛЕНИЕ 04/16 Я использовал делегат CacheItemRemovedCallback и регистрировал элементы, удаляемые из кэша на моем сайте разработчиков. Когда я обновляю страницу даже через 20 минут после начальной загрузки (со сроком действия кэша, установленным на 5 минут), появляется та же самая отметка времени, и в мой журнал ничего не добавляется. В журнале есть еще несколько элементов с надписью "Причина: удалена". Есть только один элемент, который когда-либо появляется с "Reason: Expired", но это не меню, которое я тестирую. Таким образом, кажется, что по крайней мере один элемент управления работает должным образом, но не другие.