ASP.NET Core中使用Cache緩存
緩存介紹:
通過減少生成內容所需的工作,緩存可以顯著提高應用的性能和可伸縮性。 緩存對不經常更改的數據效果最佳。 緩存生成的數據副本的返回速度可以比從原始源返回更快。 應用程序應進行編寫和測試到永遠不會依賴於緩存的數據。
ASP.NET Core 支持多種不同的緩存。 最簡單的緩存基於IMemoryCache,它表示存儲在 Web 服務器內存中的緩存。 在服務器場的多個服務器運行的應用程序應確保使用內存中緩存時,都粘滯會話。 粘性會話可確保來自客戶端的后續請求都轉到同一台服務器。 例如,Azure Web 應用使用應用程序請求路由(ARR) 將所有的后續請求路由到同一台服務器。
Web 場中的非粘性會話需要分布式緩存以避免緩存一致性問題。 對於某些應用,分布式的緩存可以支持更高版本向外縮放比內存中緩存。 使用分布式緩存可將緩存內存卸載到外部進程。
內存中緩存可以存儲任何對象;分布式緩存接口僅限於byte[]
。 內存中和分布式緩存將緩存項存儲為鍵 / 值對。
使用IMemoryCache:
1、在使用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),則可跳過此步驟
2、使用依賴關系注入從應用中引用的服務
在Startup類的ConfigureServices()方法中調用AddMemoryCache服務:
1 public void ConfigureServices(IServiceCollection services) 2 { 3 services.AddMemoryCache();
4 }
3、在構造函數中請求IMemoryCache實例
1 public class LoginController : Controller 2 { 3 private IMemoryCache _cache; 4 5 public LoginController(IMemoryCache memoryCache) 6 { 7 _cache = memoryCache; 8 }
4、使用cache緩存
①添加、讀取緩存
以下代碼使用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)):設置緩存過期時間
②清除緩存
在刪除或修改用戶信息后,需清除緩存
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 }
備注:在緩存數據發生變化后,需清除緩存,下次請求時重新添加緩存