java - C#中有没有类似Java的Cacheable?

标签 java c#

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

C#中有类似的东西吗?

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

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

最佳答案

缓存

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

缓存

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

对象缓存

内存缓存

CacheItemPolicy

  1. 对象缓存

: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/

    相关文章:

    java - 如何配置 jetty 与 Guice 和 Vaadin 一起运行

    java - 我的函数的复杂性是多少?

    c# - Microsoft.Office.Interop.Word 程序集版本高于引用版本

    c# - 跳过 Switch 后的语句

    c# - 当表的数据源动态变化时更新 Xamarin iOS 中的 UITableView

    java - Eclipse Maven 项目点抛出 File.not.Found 错误

    java - JAVA中当基类的引用变量指向子类的对象时,内部会发生什么

    java - 查找流程图中的所有方法?

    c# - 对象.等于 : everything is equal by default

    c# - 在 c# 中创建/打开从路径到新 Outlook.MailItem 的现有消息