NetCore MemoryCache使用

来源:https://www.cnblogs.com/acmeblogs/archive/2019/12/13/12035655.html
-Advertisement-
Play Games

引用類庫 1.Install-Package Microsoft.Extensions.Caching.Memory MemoryCacheOptions 緩存配置 1.ExpirationScanFrequency 獲取或設置對過期項的連續掃描之間的最短時間間隔 2.SizeLimit 緩存是沒有 ...


引用類庫

1.Install-Package Microsoft.Extensions.Caching.Memory

MemoryCacheOptions 緩存配置

1.ExpirationScanFrequency 獲取或設置對過期項的連續掃描之間的最短時間間隔

2.SizeLimit 緩存是沒有大小的的,此值設置緩存的份數

3.CompactionPercentage 獲取或設置在超過最大大小時壓縮緩存的數量,優先壓縮優先順序較低的緩存,0.2代表20%

  services.AddMemoryCache(options => {
                // 緩存最大為100份
                //##註意netcore中的緩存是沒有單位的,緩存項和緩存的相對關係
                options.SizeLimit = 2;
                //緩存滿了時候壓縮20%的優先順序較低的數據
                options.CompactionPercentage = 0.2;
                //兩秒鐘查找一次過期項
                options.ExpirationScanFrequency = TimeSpan.FromSeconds(2);
            });

 

 

 

MemoryCacheEntryOptions 單個緩存項配置

1.AbsoluteExpiration 絕對過期時間

2. AbsoluteExpirationRelativeToNow 相對於現在的絕對過期時間

3.SlidingExpiration 滑動過期時間,在時間段範圍內 緩存被再次訪問,過期時間將會被重置

4.Priority 優先順序

5.Size 緩存份數

 public bool Add(string key, object value, int ExpirtionTime = 20)
        {
            if (!string.IsNullOrEmpty(key))
            {
                MemoryCacheEntryOptions cacheEntityOps = new MemoryCacheEntryOptions()
                {
                    //滑動過期時間 20秒沒有訪問則清除
                    SlidingExpiration = TimeSpan.FromSeconds(ExpirtionTime),
                    //設置份數
                    Size = 1,
                    //優先順序
                    Priority = CacheItemPriority.Low,
                };
                //過期回掉
                cacheEntityOps.RegisterPostEvictionCallback((keyInfo, valueInfo, reason, state) =>
                {
                    Console.WriteLine($"回調函數輸出【鍵:{keyInfo},值:{valueInfo},被清除的原因:{reason}】");
                });
                _cache.Set(key, value, cacheEntityOps);
            }
            return true;
        }

完整代碼

1.介面

  public interface ICacheService
    {
        /// <summary>
        ///  新增
        /// </summary>
        /// <param name="key"></param>
        /// <param name="value"></param>
        /// <param name="ExpirtionTime"></param>
        /// <returns></returns>
        bool Add(string key, object value, int ExpirtionTime = 20);


        /// <summary>
        /// 獲取
        /// </summary>
        /// <param name="key"></param>
        /// <returns></returns>
        string GetValue(string key);
        /// <summary>
        /// 驗證緩存項是否存在
        /// </summary>
        /// <param name="key">緩存Key</param>
        /// <returns></returns>
        bool Exists(string key);

        /// <summary>
        /// 移除
        /// </summary>
        /// <param name="key"></param>
        /// <returns></returns>
        bool Remove(string key);
    }

2. 實現  ICacheService

/// <summary>
    /// 緩存介面實現
    /// </summary>
    public class MemoryCacheService : ICacheService
    {
        protected IMemoryCache _cache;

        public MemoryCacheService(IMemoryCache cache)
        {
            _cache = cache;
        }

        public bool Add(string key, object value, int ExpirtionTime = 20)
        {
            if (!string.IsNullOrEmpty(key))
            {
                MemoryCacheEntryOptions cacheEntityOps = new MemoryCacheEntryOptions()
                {
                    //滑動過期時間 20秒沒有訪問則清除
                    SlidingExpiration = TimeSpan.FromSeconds(ExpirtionTime),
                    //設置份數
                    Size = 1,
                    //優先順序
                    Priority = CacheItemPriority.Low,
                };
                //過期回掉
                cacheEntityOps.RegisterPostEvictionCallback((keyInfo, valueInfo, reason, state) =>
                {
                    Console.WriteLine($"回調函數輸出【鍵:{keyInfo},值:{valueInfo},被清除的原因:{reason}】");
                });
                _cache.Set(key, value, cacheEntityOps);
            }
            return true;
        }

        public bool Remove(string key)
        {
            if (string.IsNullOrEmpty(key))
            {
                return false;
            }
            if (Exists(key))
            {
                _cache.Remove(key);
                return true;
            }
            return false;
        }

        public string GetValue(string key)
        {
            if (string.IsNullOrEmpty(key))
            {
                return null;
            }
            if (Exists(key))
            {
                return _cache.Get(key).ToString();
            }
            return null;
        }

        public bool Exists(string key)
        {
            if (string.IsNullOrEmpty(key))
            {
                return false;
            }

            object cache;
            return _cache.TryGetValue(key, out cache);
        }

    }

大神貼1:https://www.cnblogs.com/mylinx/p/10443494.html

大神貼2:https://www.cnblogs.com/wyy1234/p/10519681.html#_label1_0


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 本文將介紹在Java程式中如何將Excel工作簿轉為PDF文檔的,包括: 將整個工作簿轉為PDF 將指定工作表轉為PDF 使用工具:Free Spire.XLS for Java (免費版) Jar文件下載及導入: 方法1:通過官網下載。下載後,解壓文件,將lib文件夾下的Spire.Xls.jar ...
  • 場景 JPA入門簡介與搭建HelloWorld(附代碼下載): https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/103473937 JPA中實現單向多對一的關聯關係: https://blog.csdn.net/BADAO_LIUM ...
  • 一、Task類簡介: Task類是在.NET Framework 4.0中提供的新功能,主要用於非同步操作的控制。它比Thread和ThreadPool提供了更為強大的功能,並且更方便使用。 Task和Task<TResult>類:前者接收的是Action委托類型;後者接收的是Func<TResult ...
  • 問題 在開發一款應用的過程中,我們開發者很難考慮到所有問題,往往會忘記處理一些可能發生的異常。隨之而來的結果就是用戶使用過程中接連不斷的崩潰。所以,我們有必要處理所有未被我們處理的異常。 思路 我們需要做的是,在錯誤發生時保存用戶數據,然後將錯誤直接展示在用戶界面上。 解決 首先,我們打開項目中的 ...
  • 比如我們需要ASP.NET Core 中需要通過PDF來進行某些簡單的報表開發,隨著這並不難,但還是會手忙腳亂的去搜索一些資料,那麼恭喜您,這篇帖子會幫助到您,我們就不會再去浪費一些寶貴的時間。 在本文中我們將要使用DinkToPDF來處理我們在.NET Core Web 程式中進行構建PDF文檔! ...
  • EulerOS其實出來有一段時間了,一直在關註,單是僅僅也只是停留在觀望的階段,目前還沒有接入的打算;正好看到園子里的兄弟分享了華為雲免費試用的活動後,難捺激動的心情,我馬上去申請試用了一臺伺服器。 ...
  • 如果要在程式中使用DbContext,則需要先在Nuget中安裝Microsoft.EntityFrameworkCore.SqlServer ...
  • 原文:https://blogs.msdn.microsoft.com/mazhou/2017/12/12/c-7-series-part-7-ref-returns/ 背景 有兩種方法可以將一個值傳遞給一個方法: 例如,FCL(.NET Framework Class Library)中的Arra ...
一周排行
    -Advertisement-
    Play Games
  • Timer是什麼 Timer 是一種用於創建定期粒度行為的機制。 與標準的 .NET System.Threading.Timer 類相似,Orleans 的 Timer 允許在一段時間後執行特定的操作,或者在特定的時間間隔內重覆執行操作。 它在分散式系統中具有重要作用,特別是在處理需要周期性執行的 ...
  • 前言 相信很多做WPF開發的小伙伴都遇到過表格類的需求,雖然現有的Grid控制項也能實現,但是使用起來的體驗感並不好,比如要實現一個Excel中的表格效果,估計你能想到的第一個方法就是套Border控制項,用這種方法你需要控制每個Border的邊框,並且在一堆Bordr中找到Grid.Row,Grid. ...
  • .NET C#程式啟動閃退,目錄導致的問題 這是第2次踩這個坑了,很小的編程細節,容易忽略,所以寫個博客,分享給大家。 1.第一次坑:是windows 系統把程式運行成服務,找不到配置文件,原因是以服務運行它的工作目錄是在C:\Windows\System32 2.本次坑:WPF桌面程式通過註冊表設 ...
  • 在分散式系統中,數據的持久化是至關重要的一環。 Orleans 7 引入了強大的持久化功能,使得在分散式環境下管理數據變得更加輕鬆和可靠。 本文將介紹什麼是 Orleans 7 的持久化,如何設置它以及相應的代碼示例。 什麼是 Orleans 7 的持久化? Orleans 7 的持久化是指將 Or ...
  • 前言 .NET Feature Management 是一個用於管理應用程式功能的庫,它可以幫助開發人員在應用程式中輕鬆地添加、移除和管理功能。使用 Feature Management,開發人員可以根據不同用戶、環境或其他條件來動態地控制應用程式中的功能。這使得開發人員可以更靈活地管理應用程式的功 ...
  • 在 WPF 應用程式中,拖放操作是實現用戶交互的重要組成部分。通過拖放操作,用戶可以輕鬆地將數據從一個位置移動到另一個位置,或者將控制項從一個容器移動到另一個容器。然而,WPF 中預設的拖放操作可能並不是那麼好用。為瞭解決這個問題,我們可以自定義一個 Panel 來實現更簡單的拖拽操作。 自定義 Pa ...
  • 在實際使用中,由於涉及到不同編程語言之間互相調用,導致C++ 中的OpenCV與C#中的OpenCvSharp 圖像數據在不同編程語言之間難以有效傳遞。在本文中我們將結合OpenCvSharp源碼實現原理,探究兩種數據之間的通信方式。 ...
  • 一、前言 這是一篇搭建許可權管理系統的系列文章。 隨著網路的發展,信息安全對應任何企業來說都越發的重要,而本系列文章將和大家一起一步一步搭建一個全新的許可權管理系統。 說明:由於搭建一個全新的項目過於繁瑣,所有作者將挑選核心代碼和核心思路進行分享。 二、技術選擇 三、開始設計 1、自主搭建vue前端和. ...
  • Csharper中的表達式樹 這節課來瞭解一下表示式樹是什麼? 在C#中,表達式樹是一種數據結構,它可以表示一些代碼塊,如Lambda表達式或查詢表達式。表達式樹使你能夠查看和操作數據,就像你可以查看和操作代碼一樣。它們通常用於創建動態查詢和解析表達式。 一、認識表達式樹 為什麼要這樣說?它和委托有 ...
  • 在使用Django等框架來操作MySQL時,實際上底層還是通過Python來操作的,首先需要安裝一個驅動程式,在Python3中,驅動程式有多種選擇,比如有pymysql以及mysqlclient等。使用pip命令安裝mysqlclient失敗應如何解決? 安裝的python版本說明 機器同時安裝了 ...