在Java Spring Boot中,我可以使用注释@EnableCaching
轻松启用缓存,并使用@Cacheable
让方法缓存结果,这样,我的方法的任何输入具有完全相同的参数不会调用该方法,而是使用缓存的结果立即返回。
C#中有类似的东西吗?
我过去所做的是我必须实现我自己的缓存类,我自己的数据结构,这是一个很大的麻烦。我只是想要一种简单的方法让程序缓存结果并在输入参数相同的情况下返回准确的结果。
编辑:我不想使用任何第三方的东西,所以没有 MemCached,没有 Redis,没有 RabbitMQ 等......只是寻找一个非常简单而优雅的解决方案,例如 Java 的 @Cacheable
。
最佳答案
缓存
缓存是 Microsoft 提供的最有值(value)的功能。它是一种相对较小但可以非常快速地访问的存储器。它本质上存储了可能再次使用的信息。例如,Web 浏览器通常使用缓存,通过在本地(例如本地计算机上)存储网页文件的副本来加快网页加载速度。
缓存
缓存是将数据存储到缓存中的过程。使用 C# 语言进行缓存非常容易。 System.Runtime.Caching.dll 提供了在 C# 中使用缓存的功能。在此图中,我使用以下类:
对象缓存
内存缓存
CacheItemPolicy
- 对象缓存
:CacheItem 类提供缓存条目的逻辑表示,其中可以包含使用 RegionName 属性的区域。它存在于System.Runtime.Caching中。
- 内存缓存
:此类也属于 System.Runtime.Caching,它表示实现缓存内存的类型。
- 缓存项策略
:表示特定缓存条目的一组逐出和过期详细信息。
.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 - 此类可以在用户代码中构造。它具有不同的界面和更多功能,例如更新\删除
回调、区域、监视器等。要使用它,您需要导入库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
关于java - C#中有没有类似Java的Cacheable?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56884398/