文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

如何在 ASP.NET Core 中使用 LazyCache

2024-12-03 09:05

关注

本文转载自微信公众号「码农读书」,作者码农读书。转载本文请联系码农读书公众号。

微软的 ASP.NET Core 已经是一个非常流行的用于构建 高性能, 模块化 并能运行在 Windows, Linux, MacOS 上的 WEB 框架,通常能够让程序保持高性能的一个有效途径就是通过缓存热链上的数据来应对高频的请求。

LazyCache 是一款基于内存的易于使用和线程安全的缓存组件,值得注意的是,这里的 Lazy指的是 LazyCache 永远不会在 缓存未命中 时触发一次以上的缓存委托函数,因为内置了锁,换句话说,Lazy 减少了不必要的计算开销,这篇文章我们将会讨论如何在 ASP.NET Core 5.0 中使用 LazyCache。

安装 LazyCache

要想在 ASP.NET Core MVC 5 中使用 LazyCache,你需要安装如下两个 nuget 包。

你可以通过 Nuget 可视化工具安装或者通过如下命令进行安装。

  1. PM> Install-Package LazyCache 
  2. PM> Install-Package LazyCache.AspNetCore 

为什么要缓存?

缓存是一种 状态管理策略,在web应用程序中,它常常用来缓存一些数据到内存中供后续请求复用,这样就规避了原来不得不走硬盘取数据的尴尬,显而易见,缓存是提高 web 程序性能的一大利器,

虽然 ASP.NET Core 缺少内置的 Cache,但它提供了对三种缓存类型的支持:内存缓存,分布式缓存 和 响应缓存。

为什么要使用 LazyCacheLazy

Cache 是一个开源的,简单的,线程安全的,可扩展的 缓存组件,在底层,LazyCache 使用了 Microsoft.Extensions.Caching 下的 MemoryCache 并使用了 懒锁 来确保 委托 只会执行一次。

如果你想缓存从数据库中取得的数据,复杂的对象图 和 web服务调用,那么使用 LazyCache 是一个非常好的选择,通常默认缓存的时间是 20min。

下面简单罗列了 LazyCache 的一些特点。

配置 LazyCache

要想配置 LazyCache,可以在 ConfigureServices() 方法中通过调用 AddLazyCache() 将 LazyCache 注入到 ServiceContainer 中,如下代码所示:

  1. public void ConfigureServices(IServiceCollection services) 
  2.         { 
  3.             services.AddLazyCache(); 
  4.             services.AddControllers(); 
  5.         } 

这样就可以确保 LazyCache 可以贯穿在你的应用程序中,要想访问 LazyCache 可以通过 IAppCache 接口,定义如下:

  1. public interface IAppCache 
  2.     { 
  3.         ICacheProvider CacheProvider { get; } 
  4.         CacheDefaults DefaultCachePolicy { get; } 
  5.  
  6.         void Add(string key, T item, MemoryCacheEntryOptions policy); 
  7.         T Get(string key); 
  8.         Task GetAsync(string key); 
  9.         T GetOrAdd(string key, Func addItemFactory); 
  10.         T GetOrAdd(string key, Func addItemFactory, MemoryCacheEntryOptions policy); 
  11.         Task GetOrAddAsync(string key, Func> addItemFactory); 
  12.         Task GetOrAddAsync(string key, Func> addItemFactory, MemoryCacheEntryOptions policy); 
  13.         void Remove(string key); 
  14.         bool TryGetValue(string keyout object value); 
  15.     } 

将 IAppCache 注入到 Controller 中

一切都配置好之后,接下来就可以将 IAppCache 通过构造函数注入的方式灌到 Controller 中,如下代码所示:

  1. [ApiController] 
  2.    [Route("[controller]")] 
  3.    public class WeatherForecastController : ControllerBase 
  4.    { 
  5.        private readonly IAppCache _lazyCache; 
  6.  
  7.        public WeatherForecastController(IAppCache cache) 
  8.        { 
  9.            this._lazyCache = cache; 
  10.        } 
  11.    } 

 

通过 LazyCache 新增,获取数据

考虑如下返回 list 的 GetData() 方法。

  1. private async Task> GetData() 
  2.     return new List() 
  3.     { 
  4.        "Joydip Kanjilal"
  5.        "Steve Smith"
  6.        "Rick Smith" 
  7.     }; 

接下来通过 GetOrAddAsync 方法从缓存获取或添加数据,如下代码所示:

  1. [ApiController] 
  2.   [Route("[controller]")] 
  3.   public class WeatherForecastController : ControllerBase 
  4.   { 
  5.       private readonly IAppCache _lazyCache; 
  6.  
  7.       public WeatherForecastController(IAppCache cache) 
  8.       { 
  9.           this._lazyCache = cache; 
  10.       } 
  11.  
  12.       [HttpGet] 
  13.       public async Task> Get() 
  14.       { 
  15.           var data = await _lazyCache.GetOrAddAsync("Authors", GetData, DateTimeOffset.Now.AddMinutes(30)); 
  16.  
  17.           return data; 
  18.       } 
  19.  
  20.       private async Task> GetData() 
  21.       { 
  22.           return new List() 
  23.                  { 
  24.                     "Joydip Kanjilal"
  25.                     "Steve Smith"
  26.                     "Rick Smith" 
  27.                  }; 
  28.       } 
  29.   } 

 

如果你想在内存中存储更多的数据或者你想使用档次更高的缓存服务,推荐使用 Redis 作为分布式缓存,而 LazyCache 🐂👃的地方在于你使用的一直是 IAppCache,这就意味着你可以轻松的用 Redis 来替换底层默认的 MemoryCache。

译文链接:https://www.infoworld.com/article/3608568/how-to-use-lazycache-in-aspnet-core-mvc-5.html

 

来源:码农读书内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯