C# 内存缓存添加到列表

本文关键字:列表 添加 缓存 内存 | 更新日期: 2023-09-27 18:35:44

我在我的 c# web-api 服务器中使用了一些缓存控制。

我使用以下代码:

private static MemoryCache _cache = new MemoryCache("ExampleCache");
public static object GetItems(string key) {
    return AddOrGetExisting(key, () => InitItem(key));
}
private static List<T> AddOrGetExisting<T>(string key, Func<List<T>> valueFactory)
{
    var newValue = new Lazy<List<T>>(valueFactory);
    var oldValue = _cache.AddOrGetExisting(key, newValue, new CacheItemPolicy()) as Lazy<List<T>>;
    try
    {
        return (oldValue ?? newValue).Value;
    }
    catch
    {
        _cache.Remove(key);
        throw;
    }       
}
private static List<string> InitItem(string key) {
    // im actually fetching a list from the db..but for the sake of the example
    return new List<string>()
}

现在,一切正常。但是,这次我想更新数据库中的某些内容,然后,我想更新缓存控件,这样我就不必查询我的数据库了。

假设 im 使用一个看起来像这样的对象

Public class Foo{
         public string Id;
         public List<string> values;
}

并假设T在此示例中Foo

我需要将一个项目添加到列表中,该项目存储在

_cache的列表中,由FooId字段。我会疯狂地怀疑该过程是否是线程安全的。

蒂亚。

C# 内存缓存添加到列表

您可以通过在内存缓存中传递密钥并将项目添加到该列表中来获取列表。List 是引用类型,因此您所做的更改将影响原始对象。

List<T>不是线程安全的...要么你必须使用锁定机制,要么你可以使用ConcurrentBag<T>如果元素的顺序不重要。