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
    被设置,其中是可能的最大日期时间值。因此,它永远留在那里,直到被移除

  • 最好删除缓存

  • 1
    Cache[“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()在压力下不会爆炸。