.Net Core MemoryCache

這裏介紹的微軟的緩存

主要是存儲一些不易改變的數據。如一些數據的快照,這些快照數據量大,數據不會進行變更。

這裏的緩存最簡單是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方法和屬性):緩存過期或者手動移除時調用,該方法有四個參數,調用的時候自動賦值

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章