如何在 ASP.NET Core 中使用 LazyCache

  发布时间:2025-11-05 13:37:34   作者:玩站小弟   我要评论
本文转载自微信公众号「码农读书」,作者码农读书。转载本文请联系码农读书公众号。微软的 ASP.NET Core 已经是一个非常流行的用于构建 高性能, 模块化 并能运行在 Windows, Linux 。

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

微软的使用 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 包。服务器托管使用

LazyCache LazyCache.AspNetCore

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

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

为什么要缓存?

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

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

为什么要使用 LazyCacheLazy

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

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

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

可扩展性 开源 友好的 API 接口 内置 lazy 锁 底层使用 MemoryCache

配置 LazyCache

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

public void ConfigureServices(IServiceCollection services)         {             services.AddLazyCache();             services.AddControllers();         } 

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

public interface IAppCache     {         ICacheProvider CacheProvider { get; }         CacheDefaults DefaultCachePolicy { get; }         void Add<T>(string key, T item, MemoryCacheEntryOptions policy);         T Get<T>(string key);         Task<T> GetAsync<T>(string key);         T GetOrAdd<T>(string key, Func<ICacheEntry, T> addItemFactory);         T GetOrAdd<T>(string key, Func<ICacheEntry, T> addItemFactory, MemoryCacheEntryOptions policy);         Task<T> GetOrAddAsync<T>(string key, Func<ICacheEntry, Task<T>> addItemFactory);         Task<T> GetOrAddAsync<T>(string key, Func<ICacheEntry, Task<T>> addItemFactory, MemoryCacheEntryOptions policy);         void Remove(string key);         bool TryGetValue<T>(string key, out object value);     } 

将 IAppCache 注入到 Controller 中

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

[ApiController]    [Route("[controller]")]    public class WeatherForecastController : ControllerBase    {        private readonly IAppCache _lazyCache;        public WeatherForecastController(IAppCache cache)        {            this._lazyCache = cache;        }    } 

通过 LazyCache 新增,获取数据

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

private async Task<List<string>> GetData() {     return new List<string>()     {        "Joydip Kanjilal",        "Steve Smith",        "Rick Smith"     }; } 

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

[ApiController]   [Route("[controller]")]   public class WeatherForecastController : ControllerBase   {       private readonly IAppCache _lazyCache;       public WeatherForecastController(IAppCache cache)       {           this._lazyCache = cache;       }       [HttpGet]       public async Task<IEnumerable<string>> Get()       {           var data = await _lazyCache.GetOrAddAsync("Authors", GetData, DateTimeOffset.Now.AddMinutes(30));           return data;       }       private async Task<List<string>> GetData()       {           return new List<string>()                  {                     "Joydip Kanjilal",                     "Steve Smith",                     "Rick Smith"                  };       }   } 

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

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

  • Tag:

相关文章

  • 荣耀V9(荣耀V9系统的创新之处及用户体验)

    摘要:随着智能手机技术的不断发展,荣耀V9作为华为旗下的一款旗舰手机,在系统设计和用户体验方面都有了突破性的创新。本文将详细介绍荣耀V9系统的各个方面,并展示其出色的性能和用户友好的界面...
    2025-11-05
  • windows 7电脑通知区域时间显示消失的解决方法

    对于现在的办公人员来说,一般都不会使用手表来看时间了,因为没台电脑的右下角就有时间显示在那边。习惯就会成自然,突然间发现自己Windows 7系统桌面右下角的显示区域的时间不见了,是不是有点不习惯了呢
    2025-11-05
  • U盘插入到Windows7电脑会提示扫描并修复U盘请问如何取消

    在Windows 7系统下,每次将U盘插入到电脑的时候,系统就hi自动弹出“扫描并修复U盘”的提示,虽然这个措施一定上能保障U盘的安全,但是每次都会出现这个提示就十分的麻烦了,有没有什么比较好的方法能
    2025-11-05
  • windows 7系统取消用户账户控制(UAC)免受提示窗的打扰

    Windows 7中的用户账户控制简称AUC,是windows操作系统中的基础结构技术,可以帮助我们在平时使用电脑的时候阻止而已程序破坏损坏电脑,同时也更易于管理平台,而且会提醒使用者注意一些程序正在
    2025-11-05
  • 格力精密模具(以格力精密模具为主题的深入探讨与分析)

    摘要:格力精密模具作为一家专业从事模具研发与制造的企业,致力于为客户提供高质量、高精度、高效率的模具解决方案。本文将深入探讨格力精密模具的产品特点、制造工艺、技术创新以及客户评价等方面,...
    2025-11-05
  • windows 7内置搞怪功能——windows 7专用字符编辑程序图文教程

    Windows 7系统除了增加了游戏外,也内置了许多搞怪的软件,它是完全符合中文的使用习惯,可以创造满足你想象的任何文字,当然,包括整蛊朋友,让他们认认你的字。有没有觉得很好玩呀,假如有兴趣的朋友,请
    2025-11-05

最新评论