Если я вставляю для Кэширования путем присвоения значения:
Кэш ["ключ"] = значение;
каково время истечения срока?
Удаление того же значения от Кэша:
Я хочу проверить, находится ли значение в Кэше if(Cache["key"]!=null)
, лучше удалить его из Кэша Cache.Remove("key")
или Cache["key"]=null
?
- Редактирование-
Попробовав Cache.Remove
и Cache["key"]=null
, НЕ ИСПОЛЬЗОВАТЬ Cache["key"]=null
, поскольку это выдаст исключения при использовании при напряжении.
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
Если время истечения не указано, NoSlidingExpiration
и NoAbsoluteExpiration
устанавливается, где NoAbsoluteExpiration является максимально возможным DateTimeValue. Следовательно, он остается там навсегда, пока не будет удален
Лучше удалите кеш
Я считаю, что по умолчанию нет срока истечения срока действия кеша по умолчанию, поэтому я считаю, что он остается там, пока пул приложений не перезапустится.
Это единственный известный мне способ проверить, существует ли элемент в кеше
Добавьте его в кэш с помощью Политики добавления элемента в кэш с истечением срока действия, чтобы указать точный срок.
Что касается значения по умолчанию, смотрите в ASP.NET Caching: Techniques and Best Practices - раздел под названием Storing Data in the Cache указывает:
Cache["key"] = "value";
Это сохранит элемент в кэше без каких-либо зависимостей, поэтому он не истечет, пока механизм кэша не удалит его, чтобы освободить место для дополнительных кэшированных данных.
Поскольку кэш принимает объект - Null является объектом! Если вы хотите получить запись со значением null, используйте Cache["key"]=null
, если вы хотите, чтобы запись с именем "key" отсутствовала, используйте Cache. Remove("key")