代码之家  ›  专栏  ›  技术社区  ›  Ben Aston

到期时自动重新填充缓存

  •  3
  • Ben Aston  · 技术社区  · 14 年前

    我当前缓存方法调用的结果。

    缓存代码遵循标准模式:它使用缓存中的项(如果存在),否则将计算结果,在返回之前将其缓存以备将来调用。

    我想保护客户端代码不受缓存未命中的影响(例如,当项目过期时)。

    我正在考虑生成一个线程,以等待缓存对象的生存期,然后运行一个提供的函数,以便在现有项过期(或刚刚过期)时重新填充缓存。

    有人能分享与此相关的经验吗?这听起来是明智的做法吗?

    我正在使用.NET 4.0。

    4 回复  |  直到 14 年前
        1
  •  4
  •   Henk Holterman    14 年前
        2
  •  4
  •   Islam Yahiatene    14 年前
        3
  •  2
  •   dtb    14 年前

    var cache = new ConcurrentDictionary<TKey, TValue>();
    
    var value = cache.GetOrAdd(someKey, key => MyMethod(key));
    


    var cache = new ConcurrentDictionary<TKey, Tuple<TValue, DateTime>>();
    
    var value = cache.AddOrUpdate(someKey,
                 key => Tuple.Create(MyMethod(key), DateTime.Now),
        (key, value) => (value.Item2 + lifetime < DateTime.Now)
                      ? Tuple.Create(MyMethod(key), DateTime.Now)
                      : value)
                      .Item1;
    

        4
  •  0
  •   Steven Sudit    14 年前