C# - 从缓存中插入和删除

时间:2010-05-20 06:54:09

标签: c# asp.net caching

  1. 如果我通过赋值来插入Cache:

    Cache [“key”] = value;

    什么是到期时间?

  2. 从缓存中删除相同的值:

    我想通过if(Cache["key"]!=null)检查该值是否在缓存中,是否最好将其从缓存中移除Cache.Remove("key")Cache["key"]=null

  3. - 编辑 -

    尝试Cache.RemoveCache["key"]=null后,请勿使用Cache["key"]=null,因为在压力下使用时会抛出异常。

4 个答案:

答案 0 :(得分:11)

1 Cache["key"] = value等于Cache.Insert("key", value)

MSDN Cache.Insert - method (String, Object):

  

此方法将覆盖现有的   密钥与密钥匹配的缓存项   参数。该对象添加到   缓存使用此重载   插入的插入方法没有文件   或缓存依赖关系,优先级   默认值,滑动到期值   NoSlidingExpiration,绝对   到期值   NoAbsoluteExpiration。

2最好通过Cache.Remove(“key”)从缓存中删除值。 如果您使用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

更易读

答案 1 :(得分:3)

  1. 使用The add an item to the cache with expiration policies将其添加到缓存中以指定确切的时间范围 至于默认值,请参阅ASP.NET Caching: Techniques and Best Practices - 标题为在缓存中存储数据的部分指定:

      

    Cache [“key”] =“value”;

         

    这会将项目存储在缓存中   没有任何依赖,所以它会   除非缓存引擎,否则不会过期   删除它以便腾出空间   其他缓存数据。

  2. 当缓存占用一个对象时 - Null是一个对象!如果您想要一个值为null的条目,请使用Cache["key"]=null如果您不想使用名称“key”进行输入,请使用Cache.Remove("key")

答案 2 :(得分:2)

  1. 如果未指定到期时间NoSlidingExpiration,则设置NoAbsoluteExpirationNoAbsoluteExpiration是最大可能的DateTimeValue。因此它永远留在那里直到它被删除

  2. 更好地删除缓存

答案 3 :(得分:0)

  1. 我认为默认情况下没有默认的缓存到期时间,所以我相信它一直存在,直到应用程序池回收。

  2. 这是我知道检查缓存中是否存在某个项目的唯一方法