当前位置:  开发笔记 > 编程语言 > 正文

寻找一个非常简单的Cache示例

如何解决《寻找一个非常简单的Cache示例》经验,为你挑选了3个好方法。

我正在寻找一个简单的例子,说明如何将对象添加到缓存中,再次将其取回并删除它.

这里的第二个答案是我喜欢看的那种例子......

List list = new List();

Cache["ObjectList"] = list;                 // add
list = ( List) Cache["ObjectList"]; // retrieve
Cache.Remove("ObjectList");                 // remove


但是当我尝试这个时,我得到的第一行:

'Cache'是一种类型,在给定的上下文中无效.

在第三行,我得到:

非静态字段blah blah blah需要一个对象方法

所以,让我说我有List......

var myList = GetListFromDB()

现在我只想添加myList到缓存中,将其取出并删除它.



1> Yuri Tcereti..:

.NET提供了一些Cache类

System.Web.Caching.Cache - ASP.NET中的默认缓存机制.您可以通过属性获取此类的实例,Controller.HttpContext.Cache也可以通过singleton获取它HttpContext.Current.Cache.预计不会显式创建此类,因为它使用内部分配的另一个缓存引擎.要使代码工作,最简单的方法是执行以下操作:

public class AccountController : System.Web.Mvc.Controller{ 
  public System.Web.Mvc.ActionResult Index(){
    List list = new List();

    HttpContext.Cache["ObjectList"] = list;                 // add
    list = (List)HttpContext.Cache["ObjectList"]; // retrieve
    HttpContext.Cache.Remove("ObjectList");                 // remove
    return new System.Web.Mvc.EmptyResult();
  }
}

System.Runtime.Caching.MemoryCache - 此类可以在用户代码中构造.它具有不同的界面和更多功能,如update\remove回调,区域,监视器等.要使用它,您需要导入库System.Runtime.Caching.它也可以在ASP.net应用程序中使用,但您必须自己管理它的生命周期.

var cache = new System.Runtime.Caching.MemoryCache("MyTestCache");
cache["ObjectList"] = list;                 // add
list = (List)cache["ObjectList"]; // retrieve
cache.Remove("ObjectList");                 // remove


好吧,MS说:https://docs.microsoft.com/en-us/dotnet/framework/performance/caching-in-net-framework-applications,建议使用RAM中的新应用程序MemoryCache命名空间.

2> 小智..:

这是我过去做过的方式:

     private static string _key = "foo";
     private static readonly MemoryCache _cache = MemoryCache.Default;

     //Store Stuff in the cache  
   public static void StoreItemsInCache()
   {
      List itemsToAdd = new List();

      //Do what you need to do here. Database Interaction, Serialization,etc.
       var cacheItemPolicy = new CacheItemPolicy()
       {
         //Set your Cache expiration.
         AbsoluteExpiration = DateTime.Now.AddDays(1)
        };
         //remember to use the above created object as third parameter.
       _cache.Add(_key, itemsToAdd, cacheItemPolicy);
    }

    //Get stuff from the cache
    public static List GetItemsFromCache()
    {
      if (!_cache.Contains(_key))
               StoreItemsInCache();

        return _cache.Get(_key) as List;
    }

    //Remove stuff from the cache. If no key supplied, all data will be erased.
    public static void RemoveItemsFromCache(_key)
    {
      if (string.IsNullOrEmpty(_key))
        {
            _cache.Dispose();
        }
        else
        {
            _cache.Remove(_key);
        }
    }

编辑:格式化.

顺便说一句,你可以做任何事情.我使用它与序列化结合来存储和检索150K项目的对象列表.



3> Kelly..:

如果你在这里使用MemoryCache是​​一个非常简单的例子:

var cache = MemoryCache.Default;

var key = "myKey";
var value = "my value";
var policy = new CacheItemPolicy { SlidingExpiration = new TimeSpan(2, 0, 0) };
cache.Add(key, value, policy);

Console.Write(cache[key]);

推荐阅读
云聪京初瑞子_617
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有