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

  1. Если я вставляю для Кэширования путем присвоения значения:

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

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

  2. Удаление того же значения от Кэша:

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

- Редактирование-

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

16
задан Luis Filipe 24 February 2014 в 10:34
поделиться

4 ответа

1 Cache ["ключ"] = значение равно Cache.Insert ("ключ", значение)

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

Этот метод перезапишет существующий элемент кеша, ключ которого совпадает с ключом параметр. Объект добавлен в кеш, используя эту перегрузку Метод вставки вставлен без файла или зависимости кеша, приоритет По умолчанию, скользящее значение истечения срока действия 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 ("ключ") гораздо удобнее, чем Cache ["key"] = null

11
ответ дан 30 November 2019 в 22:43
поделиться
  1. Если время истечения не указано, NoSlidingExpiration и NoAbsoluteExpiration устанавливается, где NoAbsoluteExpiration является максимально возможным DateTimeValue. Следовательно, он остается там навсегда, пока не будет удален

  2. Лучше удалите кеш

2
ответ дан 30 November 2019 в 22:43
поделиться
  1. Я считаю, что по умолчанию нет срока истечения срока действия кеша по умолчанию, поэтому я считаю, что он остается там, пока пул приложений не перезапустится.

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

0
ответ дан 30 November 2019 в 22:43
поделиться
  1. Добавьте его в кэш с помощью Политики добавления элемента в кэш с истечением срока действия, чтобы указать точный срок.
    Что касается значения по умолчанию, смотрите в ASP.NET Caching: Techniques and Best Practices - раздел под названием Storing Data in the Cache указывает:

    Cache["key"] = "value";

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

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

3
ответ дан 30 November 2019 в 22:43
поделиться
Другие вопросы по тегам:

Похожие вопросы: