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

С# - Вставка и удаление из кеша

  • Если я вставляю в Cache, назначая значение:

    Кэш [ "ключ" ] = значение;

    какое время истечения срока действия?

  • Удаление одного и того же значения из кеша:

    Я хочу проверить, находится ли значение в кеше на if(Cache["key"]!=null), лучше ли его удалить из кеша Cache.Remove("key") или Cache["key"]=null?

- Изменить -

Попробовав Cache.Remove и Cache["key"]=null, НЕ ИСПОЛЬЗУЙТЕ Cache["key"]=null, поскольку он будет генерировать исключения при использовании в стрессе.

4b9b3361

Ответ 1

1 Cache["key"] = value равно Cache.Insert("key", value)

MSDN Cache.Insert - метод (String, Object):

Этот метод перезапишет существующий элемент кэша, ключ которого соответствует ключу параметр. Объект, добавленный к кеш, используя эту перегрузку Метод Insert вставлен без файла или кеш-зависимостей, приоритет Значение по умолчанию, скользящее значение срока действия NoSlidingExpiration и абсолютный срок действия NoAbsoluteExpiration.

2 Лучше удалить значения из кеша с помощью Cache.Remove( "ключ" ). Если вы используете Cache["key"] = null, то он равен Cache.Insert("key", null). Взгляните на реализацию Cache.Insert:

public void Insert(string key, object value)
{
    this._cacheInternal.DoInsert(true, key, value, null, NoAbsoluteExpiration, NoSlidingExpiration, CacheItemPriority.Normal, null, true);
}

и CacheInternal.DoInsert:

internal object DoInsert(bool isPublic, string key, object value, CacheDependency dependencies, DateTime utcAbsoluteExpiration, TimeSpan slidingExpiration, CacheItemPriority priority, CacheItemRemovedCallback onRemoveCallback, bool replace)
{
    using (dependencies)
    {
        object obj2;
        CacheEntry cacheKey = new CacheEntry(key, value, dependencies, onRemoveCallback, utcAbsoluteExpiration, slidingExpiration, priority, isPublic);
        cacheKey = this.UpdateCache(cacheKey, cacheKey, replace, CacheItemRemovedReason.Removed, out obj2);
        if (cacheKey != null)
        {
            return cacheKey.Value;
        }
        return null;
    }
}

Сравните его с Cache.Remove:

public object Remove(string key)
{
    CacheKey cacheKey = new CacheKey(key, true);
    return this._cacheInternal.DoRemove(cacheKey, CacheItemRemovedReason.Removed);
}

CacheInternal.DoRemove:

internal object DoRemove(CacheKey cacheKey, CacheItemRemovedReason reason)
{
    object obj2;
    this.UpdateCache(cacheKey, null, true, reason, out obj2);
    return obj2;
}

И, наконец, Cache.Remove("key") гораздо более читается, чем Cache["key"] = null

Ответ 2

  • Добавьте его в кеш с помощью Добавьте элемент в кэш с политиками истечения срока действия, чтобы указать точный временной интервал.
    Что касается значения по умолчанию, см. Кэширование ASP.NET: методы и лучшие практики - раздел под названием Хранение данных в кэше указывает:

    Кэш [ "ключ" ] = "значение";

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

  • Поскольку кеш берет объект - Null - это объект! если вам нужна запись со значением null, используйте Cache["key"]=null, если вы не хотите, чтобы запись с именем "ключ" использовала Cache.Remove("key")

Ответ 3

  • Если время истечения не указано NoSlidingExpiration и NoAbsoluteExpiration установлено, где NoAbsoluteExpiration является самым большим возможным DateTimeValue, Следовательно, он остается там навсегда, пока он не будет удален.

  • Лучше удалите кеш

Ответ 4

  • Я считаю, что по умолчанию не существует времени истечения времени кеша по умолчанию, поэтому я считаю, что он остается там до тех пор, пока пул приложений не переработает.

  • Это единственный способ узнать, существует ли элемент в кеше