這裏介紹的微軟的緩存
主要是存儲一些不易改變的數據。如一些數據的快照,這些快照數據量大,數據不會進行變更。
這裏的緩存最簡單是IMemoryCache,它是存儲在web服務器的內存中的緩存。使用MemoryCache緩存感覺有個坑,就是.net core運行時不會根據內存壓力限制緩存大小,開發人員需要通過使用setsize,size,sizelimit限制緩存大小。
不過它的使用方式很簡單,只需要從應用程序中使用依賴關係注入引用就可以。具體可以看官方文檔https://docs.microsoft.com/zh-cn/aspnet/core/performance/caching/memory?view=aspnetcore-3.1
使用緩存關鍵的就是過期時間的設置和緩存限制大小。
MemoryCacheEntryOptions
public IActionResult CreateCallbackEntry() { var cacheEntryOptions = new MemoryCacheEntryOptions() // Pin to cache. .SetPriority(CacheItemPriority.NeverRemove) // Add eviction callback .RegisterPostEvictionCallback(callback: EvictionCallback, state: this); _cache.Set(CacheKeys.CallbackEntry, DateTime.Now, cacheEntryOptions); return RedirectToAction("GetCallbackEntry"); } public IActionResult GetCallbackEntry() { return View("Callback", new CallbackViewModel { CachedTime = _cache.Get<DateTime?>(CacheKeys.CallbackEntry), Message = _cache.Get<string>(CacheKeys.CallbackMessage) }); }
MemoryCache.Compact
嘗試按以下順序刪除緩存的指定百分比:
- 所有過期項。
- 按優先級排序。 首先刪除最低優先級項。
- 最近最少使用的對象。
- 絕對過期的項。
- 具有最早的可調過期項的項。
永遠不會刪除具有優先級的固定項 NeverRemove 。 以下代碼將刪除緩存項並調用 Compact
首先進行註冊緩存服務
services.AddMemoryCache();
依賴注入
private IMemoryCache _cache1; public XXXController(IMemoryCache memoryCache)5
{ _cache1 = memoryCache; }
接下來就是正常的操作了
- Get<T>方法:根據鍵名獲取指定類型的值,將返回值做判斷,比如根據是否爲null,來判斷有沒有值。
- TryGetValue(object key, out TItem value);根據key獲取指定類型值,通過out參數進行輸出,如果拿到值返回true,如果拿不到值返回false
- GetOrCreate(object key, Func<ICacheEntry, TItem> factory);適用場景:key有值則獲取該值,沒有值爲它賦值(通過return直接返回)
寫入
- Set<TItem>(object key, TItem value); 最簡單的鍵值模式
- Set<TItem>(object key, TItem value, MemoryCacheEntryOptions options); 通過MemoryCacheEntryOptions設置緩存的性質
移除
Remove方法:Remove(object key); 移除緩存
過期時間
- MemoryCacheEntryOptions
- 設置緩存大小
- 絕對過期時間(SetAbsoluteExpiration方法和AbsoluteExpiration屬性):絕對指的是到了這個時間就過期,不管這期間有沒有人訪問。
- 絕對過期有兩種設置方式:① 通過TimeSpan設置距離當前時間的間隔 ② 通過DateTimeOffset設置具體到某一時刻。 詳見下面案例④
- 滑動過期時間(SetSlidingExpiration方法和SlidingExpiration屬性):相對是指以最後一次訪問來計算,每訪問一次重新計算過期時間。
- 緩存級別(SetPriority方法和Priority屬性):有Low、Normal、High、NeverRemove。
- 緩存移除時回調(RegisterPostEvictionCallback方法和屬性):緩存過期或者手動移除時調用,該方法有四個參數,調用的時候自動賦值