C#-从缓存中插入和删除
如果通过指定值插入缓存: 缓存[“键”]=值 有效期是什么时候C#-从缓存中插入和删除,c#,asp.net,caching,C#,Asp.net,Caching,如果通过指定值插入缓存: 缓存[“键”]=值 有效期是什么时候 正在从缓存中删除相同的值: 我想通过if(Cache[“key”!=null)检查值是否在缓存中,最好通过Cache将其从缓存中删除。删除(“key”)或Cache[“key”]=null --编辑-- 在尝试缓存后。删除和缓存[“key”]=null,不要使用缓存[“key”]=null,因为它在压力下使用时会引发异常 使用将其添加到缓存以指定确切的时间范围。 关于默认设置,请参见中-标题为“在缓存中存储数据”的部分指定: 缓存[
if(Cache[“key”!=null)
检查值是否在缓存中,最好通过Cache将其从缓存中删除。删除(“key”)
或Cache[“key”]=null
缓存后。删除和缓存[“key”]=null
,不要使用缓存[“key”]=null
,因为它在压力下使用时会引发异常
使用将其添加到缓存以指定确切的时间范围。
关于默认设置,请参见中-标题为“在缓存中存储数据”的部分指定:
缓存[“键”]=“值”
这将在缓存中存储该项
没有任何依赖关系,所以它会
除非缓存引擎
将其移除,以便为其腾出空间
其他缓存数据
当缓存接受一个对象时-Null是一个对象!如果您想要一个值为null的条目,请使用Cache[“key”]=null
如果您不想要名称为“key”的条目,请使用Cache.Remove(“key”)
我相信默认情况下没有默认的缓存到期时间,所以我相信它会一直存在,直到应用程序池回收
这是我所知道的检查缓存中是否存在项的唯一方法
当未指定过期时间时,NoSlidingExpiration
和NoAbsoluteExpiration
被设置,其中是可能的最大日期时间值。因此,它永远留在那里,直到被移除
最好删除缓存
1Cache[“key”]=value
等于Cache.Insert(“key”,value)
此方法将覆盖现有的
缓存其密钥与密钥匹配的项
参数添加到
使用
插入方法时没有文件
或缓存依赖项,优先级为
默认情况下,滑动过期值为
无滑过期,绝对
有效期
没有绝对的消耗
2最好一个一个地从缓存中删除值。删除(“键”)。
如果您使用Cache[“key”]=null
它等于Cache.Insert(“key”,null)
。
查看缓存。插入实现:
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;
}
}
将其与缓存进行比较。删除:
public object Remove(string key)
{
CacheKey cacheKey = new CacheKey(key, true);
return this._cacheInternal.DoRemove(cacheKey, CacheItemRemovedReason.Removed);
}
internal object DoRemove(CacheKey cacheKey, CacheItemRemovedReason reason)
{
object obj2;
this.UpdateCache(cacheKey, null, true, reason, out obj2);
return obj2;
}
CacheInternal.DoRemove
:
public object Remove(string key)
{
CacheKey cacheKey = new CacheKey(key, true);
return this._cacheInternal.DoRemove(cacheKey, CacheItemRemovedReason.Removed);
}
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.好的,但是移除本身呢?在这种情况下,最佳做法是什么?分配null或Remove()?此外,使用cache[“key”]=null从缓存中删除会导致应用程序在压力下崩溃。所以我建议删除()。Cache[“key”]=null将引发ArgumentNullException-这与“压力”无关。重要提示:在压力下使用Cache[key]=null将引发异常,即使它在正常条件下工作正常。Cache.Remove()在压力下不会爆炸。