【问题标题】:Maintaing List<T> in cache like database像数据库一样在缓存中维护 List<T>
【发布时间】:2013-03-29 23:02:29
【问题描述】:

我有一个要求,我需要在内存中维护一个列表。

例如 -

list<products>

每个用户都将运行应用程序并从列表中添加新产品/更新产品/删除产品 并且所有更改都应反映在该列表中。

我正在尝试将列表存储在对象缓存中。

但是当我运行应用程序时,它会创建产品,但是当我第二次运行它时,列表不在缓存中。 需要帮助。

以下是代码 -

public class ProductManagement
{

    List<Productlist> _productList;
    ObjectCache cache= MemoryCache.Default;

    public int Createproduct(int id,string productname)
    {
            if (cache.Contains("Productlist"))
            {
                _productList = (List<Productlist>)cache.Get("Productlist");
            }
            else
            {
                _productList = new List<Productlist>();
            }

            Product pro = new Product();
            pro.ID = id;
            pro.ProductName = productname;

            _productList.Add(pro);

            cache.AddOrGetExisting("Productlist", _productList, DateTime.MaxValue);

            return id;
    }

    public Product GetProductbyId(int id)
    {
            if (cache.Contains("Productlist"))
            {
                _productList = (List<Productlist>)cache.Get("Productlist");
            }
            else
            {
                _productList = new List<Productlist>();
            }

            var product = _productList.Single(i => i.ID == id);
            return product;
    }

}

即使在应用程序未运行时,我如何确保列表是持久的,这可能吗? 以及如何保持缓存处于活动状态并在下次检索相同的缓存。

非常感谢您的帮助。

【问题讨论】:

    标签: list c#-4.0 caching persistent-storage objectcache


    【解决方案1】:

    内存可以不同http://en.wikipedia.org/wiki/Computer_memory。 MemoryCache 将信息存储在进程内存中,进程内存仅在进程存在时才存在。

    如果您的要求是在进程内存中维护列表 - 您的任务已完成,并且您不需要使用 ObjectCache cache= MemoryCache.Default;,您可以将列表保留为 ProductManagement 的字段。

    如果您需要在应用程序启动之间保留列表 - 您需要做额外的工作以在关闭应用程序时将列表写入文件并在打开应用程序时读取它。

    【讨论】:

    • 谢谢回复,我想在多个应用程序启动之间保留列表,该列表类似于数据库,它将持续一段时间,与应用程序进程是否工作无关,除了将列表存储在文件中之外,还有其他选择吗?在缓存中
    • 如果您需要在应用程序启动之间保留缓存,您应该使用文件或数据库。
    • 嗨,我尝试了一个带有 2 个测试用例的场景,在第一个测试用例中,我创建了缓存并将项目添加到缓存中并从缓存中访问项目并且它可以工作,然后我运行第二个测试用例只访问缓存并搜索在第一个测试用例中添加的项目,但不是获取旧缓存,而是创建一个带有空列表的新缓存。你能告诉我可能是什么问题吗?在每个测试用例中都有可能访问单个缓存
    • 你使用了什么类型的缓存?
    • 我正在使用 objectcache - ObjectCache cache= MemoryCache.Default;
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-07
    • 1970-01-01
    • 1970-01-01
    • 2010-10-18
    相关资源
    最近更新 更多