ASP.NET Core中构造全局静态IMemoryCache

   public void ConfigureServices(IServiceCollection services)
        {
            services.AddMemoryCache();

      } 

  public class MemoryCacheHelper
    {
        public static readonly IMemoryCache memoryCache = new MemoryCache(new MemoryCacheOptions
        {
        });
        public static IMemoryCache Cache
        {
            get
            {
                return memoryCache;
            }
        }



        /// <summary>
        /// 删除所有缓存
        /// </summary>
        public static void RemoveCacheAll()
        {
            var keys = GetCacheKeys();
            foreach (var key in keys)
            {
                Cache.Remove(key);
            }
        }


        /// <summary>
        /// 获取所有缓存键
        /// </summary>
        /// <returns></returns>
        public static List<string> GetCacheKeys()
        {
            const BindingFlags flags = BindingFlags.Instance | BindingFlags.NonPublic;
            var entries = Cache.GetType().GetField("_entries", flags).GetValue(Cache);
            var cacheItems = entries as IDictionary;
            var keys = new List<string>();
            if (cacheItems == null) return keys;
            foreach (DictionaryEntry cacheItem in cacheItems)
            {
                keys.Add(cacheItem.Key.ToString());
            }
            return keys;
        }

        /// <summary>
        /// 设置缓存
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="cacheKey"></param>
        /// <param name="t"></param>
        /// <param name="expire">缓存秒数</param>
        /// <returns></returns>
        public static bool SetCache<T>(string cacheKey, T t, int expire)
        {
            try
            {
                var cacheEntryOptions = new MemoryCacheEntryOptions();
                // Keep in cache for this time, reset time if accessed.
                cacheEntryOptions.SetSlidingExpiration(TimeSpan.FromSeconds(expire));
                //绝对过期
                cacheEntryOptions.AbsoluteExpirationRelativeToNow=TimeSpan.FromSeconds(expire);
                Cache.Set(cacheKey, t, cacheEntryOptions);
                return true;
            }
            catch (Exception ex)
            {
                Console.WriteLine("MemoryCache设置缓存异常:" + ex.Message);
                return false;
            }
        }

        /// <summary>
        /// 获取缓存
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="cacheKey"></param>
        /// <returns></returns>
        public static T GetCache<T>(string cacheKey)
        {
            try
            {
                object cacheEntry = null;
                Cache.TryGetValue(cacheKey, out cacheEntry);
                return (T)cacheEntry;
            }
            catch (Exception ex)
            {
                Console.WriteLine("MemoryCache获取缓存异常:" + ex.Message);
                return default(T);
            }
        }

        /// <summary>
        /// 删除缓存
        /// </summary>
        /// <param name="cacheKey"></param>
        /// <returns></returns>
        public static bool RemoveCache(string cacheKey)
        {
            try
            {
                Cache.Remove(cacheKey);
                return true;
            }
            catch (Exception ex)
            {
                Console.WriteLine("MemoryCache删除缓存异常:" + ex.Message);
                return false;
            }
        }

    }

参考:ASP.NET Core 中的内存中缓存 | Microsoft Docs

使用示例:

需引用包: Microsoft.Extensions.Caching.Abstractions

命名空间:using Microsoft.Extensions.Caching.Memory;

   MemoryCacheHelper.Cache.Remove("key");
   MemoryCacheHelper.Cache.Set("key", 123);

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值