zoukankan      html  css  js  c++  java
  • .net core MemoryCache缓存

    /// <summary>
        /// 缓存帮助类
        /// </summary>
        public class MemoryCacheHelper
        {
            private static readonly MemoryCache Cache = new MemoryCache(new MemoryCacheOptions());
    
            /// <summary>
            /// 验证缓存项是否存在
            /// </summary>
            /// <param name="key">缓存Key</param>
            /// <returns></returns>
            public static bool Exists(string key)
            {
                if (key == null)
                    throw new ArgumentNullException(nameof(key));
                return Cache.TryGetValue(key, out _);
            }
    
            /// <summary>
            /// 添加缓存
            /// </summary>
            /// <param name="key">缓存Key</param>
            /// <param name="value">缓存Value</param>
            /// <param name="expiresSliding">滑动过期时长(如果在过期时间内有操作,则以当前时间点延长过期时间)</param>
            /// <param name="expiressAbsoulte">绝对过期时长</param>
            /// <returns></returns>
            public static bool Set(string key, object value, TimeSpan expiresSliding, TimeSpan expiressAbsoulte)
            {
                if (key == null)
                    throw new ArgumentNullException(nameof(key));
                if (value == null)
                    throw new ArgumentNullException(nameof(value));
    
                Cache.Set(key, value,
                    new MemoryCacheEntryOptions().SetSlidingExpiration(expiresSliding)
                        .SetAbsoluteExpiration(expiressAbsoulte));
                return Exists(key);
            }
    
            /// <summary>
            /// 添加缓存
            /// </summary>
            /// <param name="key">缓存Key</param>
            /// <param name="value">缓存Value</param>
            /// <param name="expiresIn">缓存时长</param>
            /// <param name="isSliding">是否滑动过期(如果在过期时间内有操作,则以当前时间点延长过期时间)</param>
            /// <returns></returns>
            public static bool Set(string key, object value, TimeSpan expiresIn, bool isSliding = false)
            {
                if (key == null)
                    throw new ArgumentNullException(nameof(key));
                if (value == null)
                    throw new ArgumentNullException(nameof(value));
    
                Cache.Set(key, value,
                    isSliding
                        ? new MemoryCacheEntryOptions().SetSlidingExpiration(expiresIn)
                        : new MemoryCacheEntryOptions().SetAbsoluteExpiration(expiresIn));
    
                return Exists(key);
            }
    
            #region 删除缓存
    
            /// <summary>
            /// 删除缓存
            /// </summary>
            /// <param name="key">缓存Key</param>
            /// <returns></returns>
            public static void Remove(string key)
            {
                if (key == null)
                    throw new ArgumentNullException(nameof(key));
    
                Cache.Remove(key);
            }
    
            /// <summary>
            /// 批量删除缓存
            /// </summary>
            /// <returns></returns>
            public static void RemoveAll(IEnumerable<string> keys)
            {
                if (keys == null)
                    throw new ArgumentNullException(nameof(keys));
    
                keys.ToList().ForEach(item => Cache.Remove(item));
            }
            #endregion
    
            #region 获取缓存
    
            /// <summary>
            /// 获取缓存
            /// </summary>
            /// <param name="key">缓存Key</param>
            /// <returns></returns>
            public static T Get<T>(string key) where T : class
            {
                if (key == null)
                    throw new ArgumentNullException(nameof(key));
    
                return Cache.Get(key) as T;
            }
    
            /// <summary>
            /// 获取缓存
            /// </summary>
            /// <param name="key">缓存Key</param>
            /// <returns></returns>
            public static object Get(string key)
            {
                if (key == null)
                    throw new ArgumentNullException(nameof(key));
    
                return Cache.Get(key);
            }
    
            /// <summary>
            /// 获取缓存集合
            /// </summary>
            /// <param name="keys">缓存Key集合</param>
            /// <returns></returns>
            public static IDictionary<string, object> GetAll(IEnumerable<string> keys)
            {
                if (keys == null)
                    throw new ArgumentNullException(nameof(keys));
    
                var dict = new Dictionary<string, object>();
                keys.ToList().ForEach(item => dict.Add(item, Cache.Get(item)));
                return dict;
            }
            #endregion
    
            /// <summary>
            /// 删除所有缓存
            /// </summary>
            public static void RemoveCacheAll()
            {
                var l = GetCacheKeys();
                foreach (var s in l)
                {
                    Remove(s);
                }
            }
    
            /// <summary>
            /// 删除匹配到的缓存
            /// </summary>
            /// <param name="pattern"></param>
            /// <returns></returns>
            public static void RemoveCacheRegex(string pattern)
            {
                IList<string> l = SearchCacheRegex(pattern);
                foreach (var s in l)
                {
                    Remove(s);
                }
            }
    
            /// <summary>
            /// 搜索 匹配到的缓存
            /// </summary>
            /// <param name="pattern"></param>
            /// <returns></returns>
            public static IList<string> SearchCacheRegex(string pattern)
            {
                var cacheKeys = GetCacheKeys();
                var l = cacheKeys.Where(k => Regex.IsMatch(k, pattern)).ToList();
                return l.AsReadOnly();
            }
    
            /// <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;
            }
    
        }
  • 相关阅读:
    Proj THUDBFuzz Paper Reading: PMFuzz: Test Case Generation for Persistent Memory Programs
    入围 WF 后训练记
    算法竞赛历程
    2021 多校 杭电 第十场
    2021 多校 杭电 第九场
    2021 多校 牛客 第十场
    2021 多校 牛客 第九场
    2021 多校 杭电 第八场
    2021 多校 杭电 第六场
    2021 多校 杭电 第七场
  • 原文地址:https://www.cnblogs.com/li-lun/p/9618565.html
Copyright © 2011-2022 走看看