日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) >

如何在 ASP.NET Core 中使用 LazyCache

發(fā)布時(shí)間:2023/12/4 68 豆豆
生活随笔 收集整理的這篇文章主要介紹了 如何在 ASP.NET Core 中使用 LazyCache 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

微軟的 ASP.NET Core 已經(jīng)是一個(gè)非常流行的用于構(gòu)建 高性能, 模塊化 并能運(yùn)行在 Windows, Linux, MacOS 上的 WEB 框架,通常能夠讓程序保持高性能的一個(gè)有效途徑就是通過(guò)緩存熱鏈上的數(shù)據(jù)來(lái)應(yīng)對(duì)高頻的請(qǐng)求。

LazyCache 是一款基于內(nèi)存的易于使用和線程安全的緩存組件,值得注意的是,這里的 Lazy 指的是 LazyCache 永遠(yuǎn)不會(huì)在 緩存未命中 時(shí)觸發(fā)一次以上的緩存委托函數(shù),因?yàn)閮?nèi)置了鎖,換句話說(shuō),Lazy 減少了不必要的計(jì)算開(kāi)銷(xiāo),這篇文章我們將會(huì)討論如何在 ASP.NET Core 5.0 中使用 LazyCache。

安裝 LazyCache

要想在 ASP.NET Core MVC 5 中使用 LazyCache,你需要安裝如下兩個(gè) nuget 包。

  • LazyCache

  • LazyCache.AspNetCore

你可以通過(guò) Nuget 可視化工具安裝或者通過(guò)如下命令進(jìn)行安裝。

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

為什么要緩存?

緩存是一種 狀態(tài)管理策略,在web應(yīng)用程序中,它常常用來(lái)緩存一些數(shù)據(jù)到內(nèi)存中供后續(xù)請(qǐng)求復(fù)用,這樣就規(guī)避了原來(lái)不得不走硬盤(pán)取數(shù)據(jù)的尷尬,顯而易見(jiàn),緩存是提高 web 程序性能的一大利器,

雖然 ASP.NET Core 缺少內(nèi)置的 Cache,但它提供了對(duì)三種緩存類型的支持:內(nèi)存緩存,分布式緩存 和 響應(yīng)緩存。

為什么要使用 LazyCache

LazyCache 是一個(gè)開(kāi)源的,簡(jiǎn)單的,線程安全的,可擴(kuò)展的 緩存組件,在底層,LazyCache 使用了 Microsoft.Extensions.Caching 下的 MemoryCache 并使用了 懶鎖 來(lái)確保 委托 只會(huì)執(zhí)行一次。

如果你想緩存從數(shù)據(jù)庫(kù)中取得的數(shù)據(jù),復(fù)雜的對(duì)象圖 和 web服務(wù)調(diào)用,那么使用 LazyCache 是一個(gè)非常好的選擇,通常默認(rèn)緩存的時(shí)間是 20min。

下面簡(jiǎn)單羅列了 LazyCache 的一些特點(diǎn)。

  • 可擴(kuò)展性

  • 開(kāi)源

  • 友好的 API 接口

  • 內(nèi)置 lazy 鎖

  • 底層使用 MemoryCache

配置 LazyCache

要想配置 LazyCache,可以在 ConfigureServices() 方法中通過(guò)調(diào)用 AddLazyCache() 將 LazyCache 注入到 ServiceContainer 中,如下代碼所示:

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

這樣就可以確保 LazyCache 可以貫穿在你的應(yīng)用程序中,要想訪問(wèn) LazyCache 可以通過(guò) 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 中

一切都配置好之后,接下來(lái)就可以將 IAppCache 通過(guò)構(gòu)造函數(shù)注入的方式灌到 Controller 中,如下代碼所示:

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

通過(guò) LazyCache 新增,獲取數(shù)據(jù)

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

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

接下來(lái)通過(guò) GetOrAddAsync 方法從緩存獲取或添加數(shù)據(jù),如下代碼所示:

[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"};}}

如果你想在內(nèi)存中存儲(chǔ)更多的數(shù)據(jù)或者你想使用檔次更高的緩存服務(wù),推薦使用 Redis 作為分布式緩存,而 LazyCache ????????的地方在于你使用的一直是 IAppCache,這就意味著你可以輕松的用 Redis 來(lái)替換底層默認(rèn)的 MemoryCache。

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

總結(jié)

以上是生活随笔為你收集整理的如何在 ASP.NET Core 中使用 LazyCache的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。