NetCore MemoryCache使用

引用類庫

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

MemoryCacheOptions 緩存配置

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

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

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

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

 

 

 

MemoryCacheEntryOptions 單個緩存項配置

1.AbsoluteExpiration 絕對過時時間code

2. AbsoluteExpirationRelativeToNow 相對於如今的絕對過時時間htm

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

4.Priority 優先級接口

5.Size 緩存份數get

 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:http://www.javashuo.com/article/p-kjbbxcdq-cd.html

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

相關文章
相關標籤/搜索