如何在 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的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 联想继续为其硬件产品完善Linux支持
- 下一篇: 在C#中使用 CancellationT