MemoryCache.Add 和 MemoryCache.Set 有啥区别?

Posted

技术标签:

【中文标题】MemoryCache.Add 和 MemoryCache.Set 有啥区别?【英文标题】:What's the difference between MemoryCache.Add and MemoryCache.Set?MemoryCache.Add 和 MemoryCache.Set 有什么区别? 【发布时间】:2012-02-10 17:08:06 【问题描述】:

我阅读了MSDN documentation,但并没有真正理解它。

我相信Set 的行为是“替换现有的,或添加”(原子地)。

对吗?

【问题讨论】:

【参考方案1】:

Add 不执行任何操作(返回 false),如果该键已经存在值。 Set 会根据需要进行插入或更新。

Remove + Add 会在另一个线程查询该键没有任何线索时在中间留下一个间隙(Set 不会;交换通常是原子的);因此,虽然SetRemove + Add 具有相同的最终结果,但机制差异很重要,因为它可能会影响其他调用者。

例如Add:

返回值

类型:System.Boolean 如果插入成功,则为 true,如果缓存中已有与 key 具有相同 key 的条目,则为 false。

【讨论】:

如果项目存在,set 是否会替换 Policy? 我刚看到你差不多一年前的消息,我正在处理类似的问题。所有 SET 重载都需要一个 Policy,所以答案是肯定的。 如果我在过期缓存上使用添加功能?会被更新后的 CacheItem 替换吗?

以上是关于MemoryCache.Add 和 MemoryCache.Set 有啥区别?的主要内容,如果未能解决你的问题,请参考以下文章

RestKit 内存核心数据存储的配置

MemoryCache 如何清除全部缓存?

& 和 && 区别和联系,| 和 || 区别和联系

第三十一节:扫盲并发和并行同步和异步进程和线程阻塞和非阻塞响应和吞吐等

shell中$()和 ` `${}${!}${#}$[] 和$(()),[ ] 和(( ))和 [[ ]]

Java基础8---面向对象代码块和继承和this和super和重写和重载和final