C#中是否有类似于Java的Cacheable?

时间:2019-07-04 09:06:36

标签: java c#

在Java Spring Boot中,我可以轻松地使用注释@EnableCaching启用缓存,并使方法使用@Cacheable缓存结果,这样,对我的方法使用完全相同的参数的任何输入都不会调用方法,但立即使用缓存的结果返回。

C#中是否有类似的东西?

我过去所做的是我必须实现自己的缓存类,我自己的数据结构,这是一个很大的麻烦。我只想让程序缓存结果,并在输入参数相同的情况下返回精确结果。

编辑:我不想使用任何第三方的东西,所以没有MemCached,没有Redis,没有RabbitMQ等...只是在寻找像Java的@Cacheable这样非常简单而优雅的解决方案。

1 个答案:

答案 0 :(得分:0)

缓存

缓存是Microsoft提供的最有价值的功能。它是一种相对较小的内存,但是可以很快访问。它实质上存储了可能再次使用的信息。例如,Web浏览器通常使用缓存通过在本地(例如,本地计算机)上存储网页文件的副本来使网页加载更快。

缓存

缓存是将数据存储到缓存中的过程。使用C#语言进行缓存非常容易。 System.Runtime.Caching.dll提供了用于在C#中进行缓存的功能。在此图中,我使用以下类:

ObjectCache

MomoryCache

CacheItemPolicy

  1. ObjectCache

:CacheItem类提供高速缓存条目的逻辑表示,该条目可以使用RegionName属性包含区域。它存在于System.Runtime.Caching中。

  1. MomoryCache

:该类也位于System.Runtime.Caching下,它表示实现缓存中内存的类型。

  1. CacheItemPolicy

:代表特定缓存条目的一组收回和到期详细信息。

.NET提供

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

public class DataController : System.Web.Mvc.Controller{ 
  public System.Web.Mvc.ActionResult Index(){
    List<object> list = new List<Object>();

    HttpContext.Cache["ObjectList"] = list;                 // add
    list = (List<object>)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<object>)cache["ObjectList"]; // retrieve
cache.Remove("ObjectList");                 // remove