ASP.NET Core中使用Cache緩存

原文: ASP.NET Core中使用Cache緩存

ASP.NET Core中使用Cache緩存

緩存介紹:

經過減小生成內容所需的工做,緩存能夠顯著提升應用的性能和可伸縮性。 緩存對不常常更改的數據效果最佳。 緩存生成的數據副本的返回速度能夠比從原始源返回更快。 應用程序應進行編寫和測試到永遠不會依賴於緩存的數據。html

ASP.NET Core 支持多種不一樣的緩存。 最簡單的緩存基於IMemoryCache,它表示存儲在 Web 服務器內存中的緩存。 在服務器場的多個服務器運行的應用程序應確保使用內存中緩存時,都粘滯會話。 粘性會話可確保來自客戶端的後續請求都轉到同一臺服務器。 例如,Azure Web 應用使用應用程序請求路由(ARR) 將全部的後續請求路由到同一臺服務器。緩存

Web 場中的非粘性會話須要分佈式緩存以免緩存一致性問題。 對於某些應用,分佈式的緩存能夠支持更高版本向外縮放比內存中緩存。 使用分佈式緩存可將緩存內存卸載到外部進程。服務器

內存中緩存能夠存儲任何對象;分佈式緩存接口僅限於byte[]。 內存中和分佈式緩存將緩存項存儲爲鍵 / 值對。分佈式

使用IMemoryCache:

一、在使用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 }

三、在構造函數中請求IMemoryCache實例

複製代碼
1 public class LoginController : Controller
2 {
3     private IMemoryCache _cache;
4 
5     public LoginController(IMemoryCache memoryCache)
6     {
7         _cache = memoryCache;
8     }
複製代碼

四、使用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)):設置緩存過時時間
②清除緩存

在刪除或修改用戶信息後,需清除緩存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

相關文章
相關標籤/搜索