經過減小生成內容所需的工做,緩存能夠顯著提升應用的性能和可伸縮性。 緩存對不常常更改的數據效果最佳。 緩存生成的數據副本的返回速度能夠比從原始源返回更快。 應用程序應進行編寫和測試到永遠不會依賴於緩存的數據。html
ASP.NET Core 支持多種不一樣的緩存。 最簡單的緩存基於IMemoryCache,它表示存儲在 Web 服務器內存中的緩存。 在服務器場的多個服務器運行的應用程序應確保使用內存中緩存時,都粘滯會話。 粘性會話可確保來自客戶端的後續請求都轉到同一臺服務器。 例如,Azure Web 應用使用應用程序請求路由(ARR) 將全部的後續請求路由到同一臺服務器。緩存
Web 場中的非粘性會話須要分佈式緩存以免緩存一致性問題。 對於某些應用,分佈式的緩存能夠支持更高版本向外縮放比內存中緩存。 使用分佈式緩存可將緩存內存卸載到外部進程。服務器
內存中緩存能夠存儲任何對象;分佈式緩存接口僅限於byte[]
。 內存中和分佈式緩存將緩存項存儲爲鍵 / 值對。分佈式
IMemoryCache
以前須要添加引用,在程序包管理控制檯中執行命令安裝依賴包:1 PM> Install-Package Microsoft.Extensions.Caching.Memory -Version 2.2.0
備註:Microsoft.AspNetCore.App(2.2.0)元包含此包,若是已經安裝過Microsoft.AspNetCore.App(2.2.0),則可跳過此步驟函數
在Startup類的ConfigureServices()方法中調用AddMemoryCache服務:性能
1 public void ConfigureServices(IServiceCollection services) 2 { 3 services.AddMemoryCache();
4 }
1 public class LoginController : Controller 2 { 3 private IMemoryCache _cache; 4 5 public LoginController(IMemoryCache memoryCache) 6 { 7 _cache = memoryCache; 8 }
如下代碼使用cache緩存實現了 添加用戶名驗證緩存,在下次請求時會直接返回緩存內容,而不用從新查詢,顯著提升應用的性能。測試
1 //檢查用戶名是否存在 2 public JsonResult SelectUName(string uname) 3 { 4 //讀取緩存 5 var cache = _cache.Get("re_" + uname); 6 if (cache == null)//若是沒有該緩存 7 { 8 //查詢用戶名是否存在 9 var re = _userdal.SelectUName(uname); 10 //將驗證結果添加到緩存 11 _cache.Set("re_" + uname, re.Status, new MemoryCacheEntryOptions().SetSlidingExpiration(TimeSpan.FromMinutes(10))); 12 return Json(new { status = re.Status }); 13 } 14 else//若是緩存不爲空,則返回緩存內容 15 { 16 return Json(new { status = cache }); 17 } 18 }
"re_" + uname:緩存名
re.Status:緩存內容
new MemoryCacheEntryOptions().SetSlidingExpiration(TimeSpan.FromMinutes(10)):設置緩存過時時間
在刪除或修改用戶信息後,需清除緩存ui
1 //刪除 2 public int Delete(int uid) 3 { 4 var re = _maindal.Delete(uid); 5 //刪除成功以後移除驗證用戶名緩存 6 _cache.Remove("re_" + HttpContext.Session.GetString("name")); 7 return re; 8 }
備註:在緩存數據發生變化後,需清除緩存,下次請求時從新添加緩存this