怎么在ASP.NET中使用LazyCache
怎么在ASP.NET中使用LazyCache?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。
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 LazyCachePM> 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 中,如下代码所示:
publicvoidConfigureServices(IServiceCollectionservices) { services.AddLazyCache(); services.AddControllers(); }
这样就可以确保 LazyCache 可以贯穿在你的应用程序中,要想访问 LazyCache 可以通过 IAppCache 接口,定义如下:
publicinterfaceIAppCache { ICacheProviderCacheProvider{get;} CacheDefaultsDefaultCachePolicy{get;} voidAdd<T>(stringkey,Titem,MemoryCacheEntryOptionspolicy); TGet<T>(stringkey); Task<T>GetAsync<T>(stringkey); TGetOrAdd<T>(stringkey,Func<ICacheEntry,T>addItemFactory); TGetOrAdd<T>(stringkey,Func<ICacheEntry,T>addItemFactory,MemoryCacheEntryOptionspolicy); Task<T>GetOrAddAsync<T>(stringkey,Func<ICacheEntry,Task<T>>addItemFactory); Task<T>GetOrAddAsync<T>(stringkey,Func<ICacheEntry,Task<T>>addItemFactory,MemoryCacheEntryOptionspolicy); voidRemove(stringkey); boolTryGetValue<T>(stringkey,outobjectvalue); }
将 IAppCache 注入到 Controller 中
一切都配置好之后,接下来就可以将 IAppCache 通过构造函数注入的方式灌到 Controller 中,如下代码所示:
[ApiController] [Route("[controller]")] publicclassWeatherForecastController:ControllerBase { privatereadonlyIAppCache_lazyCache; publicWeatherForecastController(IAppCachecache) { this._lazyCache=cache; } }
通过 LazyCache 新增,获取数据
考虑如下返回 list 的 GetData() 方法。
privateasyncTask<List<string>>GetData() { returnnewList<string>() { "JoydipKanjilal", "SteveSmith", "RickSmith" }; }
接下来通过 GetOrAddAsync 方法从缓存获取或添加数据,如下代码所示:
[ApiController] [Route("[controller]")] publicclassWeatherForecastController:ControllerBase { privatereadonlyIAppCache_lazyCache; publicWeatherForecastController(IAppCachecache) { this._lazyCache=cache; } [HttpGet] publicasyncTask<IEnumerable<string>>Get() { vardata=await_lazyCache.GetOrAddAsync("Authors",GetData,DateTimeOffset.Now.AddMinutes(30)); returndata; } privateasyncTask<List<string>>GetData() { returnnewList<string>() { "JoydipKanjilal", "SteveSmith", "RickSmith" }; } }
看完上述内容是否对您有帮助呢?如果还想对相关知识有进一步的了解或阅读更多相关文章,请关注恰卡编程网行业资讯频道,感谢您对恰卡编程网的支持。
推荐阅读
-
ASP.NET怎么实现登出系统并清除Cookie
-
CentOS下怎么实现Mono和Asp.net
CentOS下怎么实现Mono和Asp.net这篇文章主要介绍“C...
-
ASP.NET的Core AD域登录过程怎么实现
ASP.NET的Core AD域登录过程怎么实现本文小编为大家详细...
-
ASP.NET MVC中两个配置文件的作用是什么
-
ASP.NET MVC过滤器执行顺序是什么
-
ASP.NET Core Zero模块系统的示例分析
ASP.NET Core Zero模块系统的示例分析这篇文章主要为...
-
asp.net多级分类统计列表怎么实现
asp.net多级分类统计列表怎么实现本篇内容介绍了“asp.ne...
-
C#怎么用ASP.NET Core开发学生管理系统
-
ASP.net中aspx与cs函数怎么实现互调
ASP.net中aspx与cs函数怎么实现互调,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇...
-
ASP.NET中怎么优化站点构建托管资源
这篇文章将为大家详细讲解有关ASP.NET中怎么优化站点构建托管资源,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完...