C# ConcurrentDictionary作为缓存

C# ConcurrentDictionary作为缓存,c#,C#,我有ConcurrentDictionary,我将其用作未过期缓存。我想从外部数据源定期更新它。 我可以使用TryUpdate或类似的方法来填充concurrentdirectionary。但我还想删除一些数据源中不再存在的值 如何做到这一点 我知道如何使用Dictionary作为源代码构建concurrentdirectionary。但这不适用,因为我正在更新现有的ConcurrentDictionary,并且无法定期构建新的词典 **编辑** 我可以分两步完成这个操作 迭代源字典并调用目标C

我有
ConcurrentDictionary
,我将其用作未过期缓存。我想从外部数据源定期更新它。 我可以使用
TryUpdate
或类似的方法来填充
concurrentdirectionary
。但我还想删除一些数据源中不再存在的值

如何做到这一点

我知道如何使用
Dictionary
作为源代码构建
concurrentdirectionary
。但这不适用,因为我正在更新现有的
ConcurrentDictionary
,并且无法定期构建新的词典

**编辑**

我可以分两步完成这个操作

  • 迭代源
    字典
    并调用目标
    ConcurrentDictionary
    上的
    tryuUpdate

  • 迭代目标
    ConcurrentDictionary
    并删除源
    字典中不存在的每个键


  • 但我希望有一种更优雅的方式,如果存在的话

    尝试使用一个后台线程枚举ConcurrentDictionary并检查源代码。如果它不在源代码中,请将其从字典中删除。

    是否要安全地添加和删除(因为缺少更好的单词..原子地)?这与安全无关。这是关于自动删除缺少的键。在普通缓存中,未更新的实体将过期并被删除。在
    concurrenticationary
    中,实体将永远存在
    TryUpdate
    将仅更新数据源中存在的实体。但是不会删除那些你写的还没有找到的东西…不能定期构建一个新的…。为什么不呢?因为我将
    ConcurrentDictionary
    实例化为singleton,并将其用作DI中的依赖项。Project是基于Net Cype 2.2 MVC <代码> CONTURNCE字典在 HOSTIDDService < /代码>中更新的,并且在ValueCube中使用的 CurruttPrime< <代码>是一个低级抽象,并使其暴露于DI,我不认为是最佳实践。相反,我建议定义一个更高级别的抽象,它将提供一个缓存功能接口,并在其中封装一个字典或另一个数据结构。至于您正在努力解决的问题,看起来您只需要一个缓存失效,在您的情况下,它肯定可以基于缓存过期。我建议看一下
    System.Runtime.Caching.MemoryCache
    ,它提供了开箱即用的功能。