日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > asp.net >内容正文

asp.net

如何在 ASP.NET Core 中使用 LazyCache

發布時間:2023/12/4 asp.net 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 如何在 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

總結

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

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。