如何在 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;}}

通过 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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/303951.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

伪装 php 版本号,linux伪装隐藏Nginx,PHP版本号提升服务器安全性

一、隐藏Nginx版本号第一步&#xff1a;vi /usr/local/nginx/conf/nginx.conf在http{}中加入server_tokens off;第二歩&#xff1a;vi /usr/local/nginx/conf/fastcgi_params将里面的fastcgi_param SERVER_SOFTWARE nginx/$nginx_version;修改为&#xff1a;fastcgi_param SERV…

2018全球大学AI排名发布,中国高校表现强势!

[导读] 近日&#xff0c;麻省理工学院马萨诸塞校区计算机与信息科学学院教授 Emery Berger 发布一个全球院校计算机科学领域实力排名的开源项目 CSranking 更新了。目前&#xff0c;卡耐基梅隆大学&#xff08;CMU&#xff09;、麻省理工学院&#xff08;MIT&#xff09;与斯坦…

在C#中使用 CancellationToken 处理异步任务

在 .NET Core 中使用异步编程已经很普遍了&#xff0c; 你在项目中随处可见 async 和 await&#xff0c;它简化了异步操作&#xff0c;允许开发人员&#xff0c;使用同步的方式编写异步代码&#xff0c;你会发现在大部分的异步方法中&#xff0c;都提供了CancellationToken参数…

RHEL 5.4下cyrus-sasl-2.1.22 的编译安装

我们直接从编译前的配置开始&#xff1a; 1)编译前的配置 #./configure --disable-anon --enable-login --enable-ntlm --with-saslauthd/var/run/saslauthd 2&#xff09;编译并安装 #make ; make install 3&#xff09;建立库文件的链接文件 #ln -s /usr/loca…

通过Python实现马尔科夫链蒙特卡罗方法的入门级应用

通过把马尔科夫链蒙特卡罗&#xff08;MCMC&#xff09;应用于一个具体问题&#xff0c;本文介绍了 Python 中 MCMC 的入门级应用。GitHub 地址&#xff1a;https://github.com/WillKoehrsen/ai-projects/blob/master/bayesian/bayesian_inference.ipynb过去几月中&#xff0c;…

Java如何控制用户输入的长度,用Java Applet 进行Web编程时,如何限制输入域中可输入字符的长度!解决后马上给分!!!...

用Java Applet 进行Web编程时&#xff0c;如何限制输入域中可输入字符的长度&#xff01;解决后马上给分&#xff01;&#xff01;&#xff01;|create a new class FixLengthDocument extends PlainDocument, override public void insertString(int offs, String str, Attrib…

315曝光不良奸商 对企业不能罚酒三杯

3月15日&#xff0c;315晚会又曝光了一批无良奸商&#xff0c;虽然315晚会年年曝光&#xff0c;各地政府也迅速跟进打击&#xff0c;但侵害消费者权益的情况却屡见不鲜。从被曝光企业的道歉信来看&#xff0c;“承认错误只是个别问题全面排查整改配合管理部门执法向消费者表示道…

.NET 产品版权保护方案 (.NET源码加密保护)

一. 前言大家好&#xff0c;我是康世杰&#xff0c;大家可以叫我Jason。我和大家一样&#xff0c;都是搞技术出身&#xff0c;也未当过讲师&#xff0c;所以口材有限&#xff0c;如果讲得不好之处&#xff0c;还希望大家多多海含&#xff0c;谢谢。今天是我们第一次见面&…

java地图 热力图,腾讯地图数据可视化之热力图

前言数据可视化API(Web)&#xff0c;是基于腾讯位置服务JavaScript API GL实现的专业地理空间数据可视化渲染引擎。 通过这套API&#xff0c;可以实现轨迹数据、坐标点数据、热力、迁徙、航线等空间数据的可视化展现。使用步骤1、注册成为腾讯位置服务开发者&#xff0c;并进入…

建模分析师与算法工程师的主要区别

大家晚上好&#xff0c;我是新来的实习生小模君&#xff0c;前几天小智老师给我科普了数据挖掘的基础知识&#xff0c;颇有收获&#xff0c;于是就趁小天今天有事休假冒个泡跟大家分享一番。数据挖掘&#xff0c;英文名叫Data mining&#xff0c;一般是指从大型数据库中将隐藏的…

Flurl使用Polly实现重试Policy

❝在使用Flurl作为HttpClient向Server请求时&#xff0c;由于网络或者其它一些原因导致请求会有失败的情况&#xff0c;比如HttpStatusCode.NotFound、HttpStatusCode.ServiceUnavailable、HttpStatusCode.RequestTimeout等&#xff1b;网络上有比较多的HttpClientFactory使用P…

Linux下判断cpu物理个数、几核

自己服务器的输出 1. 查看物理CPU的个数 #cat /proc/cpuinfo |grep "physical id"|sort |uniq|wc -l12. 查看逻辑CPU的个数#cat /proc/cpuinfo |grep "processor"|wc -l83. 查看CPU是几核#cat /proc/cpuinfo |grep "cores"|uniqcpu cores : 44.…

java并发框架支持锁包括,jdk1.8锁

JDK1.8有什么锁?_李广进的博客-CSDN博客2020年4月23日 18、排他锁(不包含),X锁,若事务T对数据对象A加上x锁,则只允许T读取和修改A,其他任何事务都不能再对A加任何类型的锁,直到T释放A上的锁。这就保证了其他...jdk1.8对锁进行了哪些优化? - 知乎2020年1月8日 关注问题​写回答…

推荐15个 JavaScript 和 CSS 库

Tutorialzine的使命是让开发者与最新的Web开发发展同步。因此&#xff0c;我们每月都会精选一批最优秀的资源推荐给大家&#xff0c;相信这些资源你绝对值得拥有&#xff01;ClarifyJSClarifyJS可以让你串联一串方法&#xff0c;以任意顺序执行。通常的JavaScript方法是从左到右…

Dapr Meetup 3.22【周六】

点击蓝字关注我们Dapr&#xff08;Distributed Application Runtime &#xff0c;分布式应用运行时&#xff09;是微软新推出的&#xff0c;一个可移植的、由事件驱动的运行时&#xff0c;用于跨云和边缘构建分布式应用程序。2019年10月9日&#xff0c;正式以 MIT 协议开源。…

iPhone Development Blog系列: 如何制作服务条例窗口

iPhone Development Blog系列: 如何制作服务条例窗口 最近一直关注iPhone Development Blog上面的文章&#xff0c;学习的同时尝试通过翻译和整理同大家一起分享&#xff01; 假设你想让你的每个客户在使用iPhone应用前接受你的服务条例&#xff08;Terms of Services&#xff…

用matlab算24点小游戏,24点游戏的Matlab程序

function GUI_games24S.fh figure(units,pixels,...position,[500 500 800 200],...menubar,none,...name,24点游戏,...numbertitle,off,...resize,off);S.ti uicontrol(style,text,...units,pix,...position,[300 150 180 30],...string,24点的计算程序,fontsize,15);S.ra u…

日本老爷爷坚持17年用Excel作画,我可能用了假的Excel···

本文来源自网络说起办公软件Excel&#xff0c;不少人可能同小编一样&#xff0c;谈及色变。想想公式、表格头都大了&#xff0c;今天要介绍的这个人竟然可以用其作画&#xff0c;简直是大写的“丧心病狂”&#xff01;这位传奇人物就是堀内辰男&#xff0c;今年已经77岁了&…

腾讯二面挂了,就因为这个...

牛年跳槽季&#xff0c;惨遭开门黑&#xff0c;谨以此文纪念我的首次腾讯面试经历。经我的老师&#xff0c;微软MVP大佬推荐&#xff0c;有幸拿到了腾讯.NET Core高开面试机会&#xff0c;二面却挂在一个最常见的问题上&#xff0c;“你上家公司电商平台的TPS、QPS是多少&#…

51CTO博客 NO.1 大奖赛之后感想---奖品

自从加入51cto技术成就梦想这个大家庭以来&#xff0c;进入这个大家庭可以说是个机会&#xff0c;也可以是个缘分&#xff1b;已经有半年了&#xff0c;明朗炽热般的心&#xff0c;使我深深地喜欢上了这一个大家庭&#xff1b;这个大家庭是一个很不平凡而又富有源源不断学而不尽…