• 自定义缓存类扩展类


    using System;
    using System.Runtime.Caching;
    
    namespace MemoryCacheHelpSpace
    {
        public static class MemoryCacheHelp
        {
            private static Object m_objLocker = new object();
    
            public static T GetCacheItem<T>(String strKey,
                Func<T> cachePopulate,
                TimeSpan? slidingExpiration = null,
                DateTime? absoluteExpiration = null)
            {
                if (string.IsNullOrWhiteSpace(strKey)) throw new ArgumentException("无效键");
                if (cachePopulate == null) throw new ArgumentException("委托不能为null");
                if (slidingExpiration == null && absoluteExpiration == null) throw new ArgumentException("间隔或时间至少有一个");
                if (MemoryCache.Default[strKey] == null)
                {
                    lock (m_objLocker)
                    {
                        var item = new CacheItem(strKey, cachePopulate());
                        var policy = CreatePolicy(slidingExpiration, absoluteExpiration);
                        MemoryCache.Default.Add(item, policy);
                    }
                }
                return (T)MemoryCache.Default[strKey];
            }
    
            public static void CacheRemove(string strKey)
            {
                if (string.IsNullOrWhiteSpace(strKey)) throw new ArgumentException("无效键");
                if (MemoryCache.Default[strKey] != null)
                {
                    lock (m_objLocker)
                    {
                        MemoryCache.Default.Remove(strKey);
                    }
                }
            }
    
            private static CacheItemPolicy CreatePolicy(TimeSpan? slidingExpiration, DateTime? absoluteExpiration)
            {
                var policy = new CacheItemPolicy();
                if (absoluteExpiration.HasValue)
                {
                    policy.AbsoluteExpiration = absoluteExpiration.Value;
                }
                else if (slidingExpiration.HasValue)
                {
                    policy.SlidingExpiration = slidingExpiration.Value;
                }
                policy.Priority = CacheItemPriority.Default;
                return policy;
            }
        }
    }
  • 相关阅读:
    Spring Boot项目配置RabbitMQ集群
    rabbitMQ第二篇:java简单的实现RabbitMQ
    SpringBoot启动和停止脚步
    SpringBoot实战之SpringBoot自动配置原理
    maven profile 多环境
    Mybatis根据配置文件获取session(多数据源)
    Mybatis的mapper注册
    MyBatis SqlSessionFactory的几种常见创建方式
    Result映射成对象和List
    JAVA反射的使用之ResultSet的自动转换
  • 原文地址:https://www.cnblogs.com/itsone/p/13304338.html
Copyright © 2020-2023  润新知