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
不会;交换通常是原子的);因此,虽然Set
与Remove
+ Add
具有相同的最终结果,但机制差异很重要,因为它可能会影响其他调用者。
例如Add:
返回值
类型:System.Boolean 如果插入成功,则为 true,如果缓存中已有与 key 具有相同 key 的条目,则为 false。
【讨论】:
如果项目存在,set
是否会替换 Policy?
我刚看到你差不多一年前的消息,我正在处理类似的问题。所有 SET 重载都需要一个 Policy,所以答案是肯定的。
如果我在过期缓存上使用添加功能?会被更新后的 CacheItem 替换吗?以上是关于MemoryCache.Add 和 MemoryCache.Set 有啥区别?的主要内容,如果未能解决你的问题,请参考以下文章
第三十一节:扫盲并发和并行同步和异步进程和线程阻塞和非阻塞响应和吞吐等