zoukankan      html  css  js  c++  java
  • 自定义缓存类扩展类

    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;
            }
        }
    }
  • 相关阅读:
    Flask之threading.loacl方法
    websocket之简易聊天室
    websocket介绍
    Flask之jinja2模板语言
    Flask之基础
    Linux之项目的部署
    Linux之nginx负载均衡
    Linux之nginx
    Linux之redis-cluster
    Linux之redis-sentinel
  • 原文地址:https://www.cnblogs.com/itsone/p/13304338.html
Copyright © 2011-2022 走看看