快訊 來源:博客園 2023-06-23 22:14:30
隨著技術(shù)的發(fā)展,ASP.NET Core MVC也推出了好長(zhǎng)時(shí)間,經(jīng)過不斷的版本更新迭代,已經(jīng)越來越完善,本系列文章主要講解ASP.NET Core MVC開發(fā)B/S系統(tǒng)過程中所涉及到的相關(guān)內(nèi)容,適用于初學(xué)者,在校畢業(yè)生,或其他想從事ASP.NET Core MVC 系統(tǒng)開發(fā)的人員。
【資料圖】
經(jīng)過前幾篇文章的講解,初步了解ASP.NET Core MVC項(xiàng)目創(chuàng)建,啟動(dòng)運(yùn)行,以及命名約定,創(chuàng)建控制器,視圖,模型,接收參數(shù),傳遞數(shù)據(jù)ViewData,ViewBag,路由,頁(yè)面布局,wwwroot和客戶端庫(kù),Razor語(yǔ)法,EnityFrameworkCore與數(shù)據(jù)庫(kù),HttpContext,Request,Response,Session,序列化,文件上傳,自動(dòng)映射,Html輔助標(biāo)簽,模型校驗(yàn),鑒權(quán)、授權(quán)基礎(chǔ),Identity入門,日志管理,F(xiàn)ilter(篩選器)等內(nèi)容,今天繼續(xù)講解ASP.NET Core MVC 中緩存等相關(guān)內(nèi)容,僅供學(xué)習(xí)分享使用。
在應(yīng)用程序中,使用緩存,具有如下優(yōu)點(diǎn):
根據(jù)緩存的應(yīng)用范圍和存儲(chǔ)方式,可以分為以下幾種:
In-Memory緩存,將數(shù)據(jù)緩存在Web服務(wù)器內(nèi)存中,適用于單服務(wù)器部署的程序。在ASP.NET Core MVC程序中,使用內(nèi)存緩存的步驟如下
在Program.cs啟動(dòng)程序中,增加非分布式內(nèi)存緩存服務(wù),如下所示:
1 //內(nèi)存緩存2 builder.Services.AddMemoryCache();
在需要用到的內(nèi)存緩存的控制器中,添加內(nèi)存緩存接口IMemoryCache注入,如下所示:
1 private readonly ILogger_logger;2 3 private readonly IMemoryCache _memoryCache;//內(nèi)存緩存接口4 5 public HomeController(ILogger logger,IMemoryCache memoryCache)6 {7 _logger = logger;8 _memoryCache = memoryCache;9 }
在使用緩存的地方,獲取和設(shè)置緩存如下所示:
1 public IActionResult Index() 2 { 3 4 if(!_memoryCache.TryGetValue("citys",out List cityList)) 5 { 6 cityList = GetCitys(); 7 var memoryCacheEntryOptions = new MemoryCacheEntryOptions(); 8 memoryCacheEntryOptions.SetAbsoluteExpiration(TimeSpan.FromSeconds(10)); 9 memoryCacheEntryOptions.RegisterPostEvictionCallback((object key, object value, EvictionReason reason, object state) =>10 {11 //在被清除緩存時(shí),重新回調(diào),重新填充12 _logger.LogInformation("緩存被清除了.");13 }, this);14 _memoryCache.Set("citys", cityList, memoryCacheEntryOptions);15 }16 ViewBag.Citys = cityList;17 return View();18 } 示例中MemoryCacheEntryOptions,主要用于設(shè)置內(nèi)存緩存參數(shù),主要有以下幾個(gè)參數(shù)可以設(shè)置:
分布式緩存是由多個(gè)應(yīng)用服務(wù)器共享的緩存,通常作為訪問它的應(yīng)用服務(wù)器的外部服務(wù)進(jìn)行維護(hù)。 分布式緩存可以提高 ASP.NET Core 應(yīng)用的性能和可伸縮性,尤其是當(dāng)應(yīng)用由云服務(wù)或服務(wù)器場(chǎng)托管時(shí)。
與其他將緩存數(shù)據(jù)存儲(chǔ)在單個(gè)應(yīng)用服務(wù)器上的緩存方案相比,分布式緩存具有多個(gè)優(yōu)勢(shì)。分布式緩存的優(yōu)點(diǎn)
為使用的分布式緩存提供程序添加包引用:
本示例主要介紹Redis分布式緩存。
使用Redis進(jìn)行緩存,首先需要搭建Redis環(huán)境。關(guān)于Redis環(huán)境,可參考之前的文章:
Redis的分布式緩存,需要安裝第三方依賴包Microsoft.Extensions.Caching.StackExchangeRedis,如下所示:
添加StackExchangeRedisCache服務(wù),通過Configruation配置Redis連接信息和InstanceName實(shí)例名稱。如下所示:
1 //分布式緩存2 builder.Services.AddStackExchangeRedisCache(options =>3 {4 options.Configuration = "192.168.1.6:6379";5 options.InstanceName = "redis";6 });在Controller中,注入分布式緩存接口IDistributedCache,如下所示:
1 private readonly IDistributedCache _distributedCache;2 3 public HomeController(ILoggerlogger ,IDistributedCache distributedCache)4 {5 _logger = logger;6 _distributedCache = distributedCache;7 }
在使用緩存的地方,獲取GetString和設(shè)置SetString緩存如下所示:
1 public IActionResult Index() 2 { 3 var cityList = new List(); 4 var obj = _distributedCache.GetString("citys"); 5 if (string.IsNullOrEmpty(obj)) 6 { 7 cityList = GetCitys(); 8 DistributedCacheEntryOptions options = new DistributedCacheEntryOptions(); 9 options.SetAbsoluteExpiration(TimeSpan.FromSeconds(60));10 obj = JsonConvert.SerializeObject(cityList);11 _distributedCache.SetString("citys", obj,options);12 }13 cityList = JsonConvert.DeserializeObject>(obj);14 ViewBag.Citys = cityList;15 return View();16 }
運(yùn)行程序,在瀏覽器中默認(rèn)打開Home/Index,城市列表信息首次從數(shù)據(jù)庫(kù)獲取,再次獲取時(shí),則會(huì)從緩存獲取。如下所示:
在Redis服務(wù)器上進(jìn)行查看,可以發(fā)現(xiàn):
1. 緩存服務(wù)器中存儲(chǔ)的Key是加了配置的InstanceName前綴。
2. 雖然代碼中是通過SetString進(jìn)行存儲(chǔ),由于存儲(chǔ)的JSON序列化對(duì)象,所以Redis自動(dòng)識(shí)別對(duì)象類型為hash。
3. 存儲(chǔ)的中文在緩存服務(wù)器中是轉(zhuǎn)碼后的。
官方文檔:https://learn.microsoft.com/zh-cn/aspnet/core/performance/caching/overview?view=aspnetcore-6.0
以上就是ASP.NET Core MVC 從入門到精通之緩存的全部?jī)?nèi)容。
標(biāo)簽:
免責(zé)聲明:市場(chǎng)有風(fēng)險(xiǎn),選擇需謹(jǐn)慎!此文僅供參考,不作買賣依據(jù)。