ASP.NET Core中利用LazyCache的全进程

微软的 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,但它提供了对三种缓存范例的支持:内存缓存,漫衍式缓存 和 响应缓存。

为什么要利用 LazyCache

LazyCache 是一个开源的,简朴的,线程安详的,可扩展的 缓存组件,在底层,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; } }

ASP.NET Core中操作LazyCache的全历程

通过 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" }; } }

ASP.NET Core中操作LazyCache的全历程

假如你想在内存中存储更多的数据可能你想利用档次更高的缓存处事,推荐利用 Redis 作为漫衍式缓存,而 LazyCache 🐂👃的处地址于你利用的一直是 IAppCache,这就意味着你可以轻松的用 Redis 来替换底层默认的 MemoryCache。

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

总结

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wsjfwf.html