日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
如何在 ASP.NET Core 中使用 LazyCache

本文轉(zhuǎn)載自微信公眾號「碼農(nóng)讀書」,作者碼農(nóng)讀書。轉(zhuǎn)載本文請聯(lián)系碼農(nóng)讀書公眾號。

江岸網(wǎng)站建設(shè)公司成都創(chuàng)新互聯(lián),江岸網(wǎng)站設(shè)計(jì)制作,有大型網(wǎng)站制作公司豐富經(jīng)驗(yàn)。已為江岸千余家提供企業(yè)網(wǎng)站建設(shè)服務(wù)。企業(yè)網(wǎng)站搭建\成都外貿(mào)網(wǎng)站建設(shè)要多少錢,請找那個(gè)售后服務(wù)好的江岸做網(wǎng)站的公司定做!

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

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

安裝 LazyCache

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

  • LazyCache
  • LazyCache.AspNetCore

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

 
 
 
 
  1. PM> Install-Package LazyCache 
  2. PM> Install-Package LazyCache.AspNetCore 

為什么要緩存?

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

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

為什么要使用 LazyCacheLazy

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

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

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

  • 可擴(kuò)展性
  • 開源
  • 友好的 API 接口
  • 內(nèi)置 lazy 鎖
  • 底層使用 MemoryCache

配置 LazyCache

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

 
 
 
 
  1. public void ConfigureServices(IServiceCollection services) 
  2.         { 
  3.             services.AddLazyCache(); 
  4.             services.AddControllers(); 
  5.         } 

這樣就可以確保 LazyCache 可以貫穿在你的應(yīng)用程序中,要想訪問 LazyCache 可以通過 IAppCache 接口,定義如下:

 
 
 
 
  1. public interface IAppCache 
  2.     { 
  3.         ICacheProvider CacheProvider { get; } 
  4.         CacheDefaults DefaultCachePolicy { get; } 
  5.  
  6.         void Add(string key, T item, MemoryCacheEntryOptions policy); 
  7.         T Get(string key); 
  8.         Task GetAsync(string key); 
  9.         T GetOrAdd(string key, Func addItemFactory); 
  10.         T GetOrAdd(string key, Func addItemFactory, MemoryCacheEntryOptions policy); 
  11.         Task GetOrAddAsync(string key, Func> addItemFactory); 
  12.         Task GetOrAddAsync(string key, Func> addItemFactory, MemoryCacheEntryOptions policy); 
  13.         void Remove(string key); 
  14.         bool TryGetValue(string key, out object value); 
  15.     } 

將 IAppCache 注入到 Controller 中

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

 
 
 
 
  1. [ApiController] 
  2.    [Route("[controller]")] 
  3.    public class WeatherForecastController : ControllerBase 
  4.    { 
  5.        private readonly IAppCache _lazyCache; 
  6.  
  7.        public WeatherForecastController(IAppCache cache) 
  8.        { 
  9.            this._lazyCache = cache; 
  10.        } 
  11.    } 

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

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

 
 
 
 
  1. private async Task> GetData() 
  2.     return new List() 
  3.     { 
  4.        "Joydip Kanjilal", 
  5.        "Steve Smith", 
  6.        "Rick Smith" 
  7.     }; 

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

 
 
 
 
  1. [ApiController] 
  2.   [Route("[controller]")] 
  3.   public class WeatherForecastController : ControllerBase 
  4.   { 
  5.       private readonly IAppCache _lazyCache; 
  6.  
  7.       public WeatherForecastController(IAppCache cache) 
  8.       { 
  9.           this._lazyCache = cache; 
  10.       } 
  11.  
  12.       [HttpGet] 
  13.       public async Task> Get() 
  14.       { 
  15.           var data = await _lazyCache.GetOrAddAsync("Authors", GetData, DateTimeOffset.Now.AddMinutes(30)); 
  16.  
  17.           return data; 
  18.       } 
  19.  
  20.       private async Task> GetData() 
  21.       { 
  22.           return new List() 
  23.                  { 
  24.                     "Joydip Kanjilal", 
  25.                     "Steve Smith", 
  26.                     "Rick Smith" 
  27.                  }; 
  28.       } 
  29.   } 

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

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


網(wǎng)站欄目:如何在 ASP.NET Core 中使用 LazyCache
分享URL:http://www.5511xx.com/article/cdpehjh.html