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的文章就介紹到這瞭,更多相關ASP.NET Core使用LazyCache內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!
推薦閱讀:
- ASP.NET Core 依賴註入詳細
- .NET並發編程之函數閉包
- 詳解如何在ASP.NET Core Web API中以三種方式返回數據
- ASP.NET Core如何註入多個服務實現類
- .NET Core使用Worker Service創建服務