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