Элементы в кэше.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", но это не меню, которое я тестирую. Таким образом, кажется, что по крайней мере один элемент управления работает должным образом, но не другие.

0 ответов

Другие вопросы по тегам