zoukankan      html  css  js  c++  java
  • 自写缓存类

    public class MyCache
    {
        /// <summary>
        /// 插入一个缓存
        /// </summary>
        /// <param name="name">缓存键</param>
        /// <param name="value">缓存值</param>
        /// <param name="isAbsoulute">是否使用绝对过期,是则为true否则为false</param>
        /// <param name="isOverride">如果缓存存在,是否覆盖缓存值</param>
        /// <param name="absoluteDate">绝对过期时间</param>
        /// <param name="spacing">相对过期的时间间隔</param>
        /// <param name="dep">缓存依赖</param>
        /// <param name="removeddCallback">缓存被移除时调用的委托</param>
        /// <param name="priority">缓存优先级</param>
        public static void Insert(string name, object value, bool isAbsoulute, bool isOverride, DateTime absoluteDate, TimeSpan spacing, CacheDependency dep, CacheItemRemovedCallback removeddCallback, CacheItemPriority priority)
        {

            Cache cache = HttpContext.Current.Cache;
            //如果此键的缓存已存在
            if (cache[name] != null)
            {
                //如果覆盖缓存值
                if (isOverride)
                {
                    cache.Remove(name);
                    InsertInternal(name, value, isAbsoulute, absoluteDate, spacing, dep, removeddCallback, priority);
                }
                else
                {
                    return;
                }
            }
            InsertInternal(name, value, isAbsoulute, absoluteDate, spacing, dep, removeddCallback, priority);
        }

        /// <summary>
        /// 根据键名,获取缓存,如果缓存不存在,则调用返回缓存值的委托
        /// </summary>
        public static object GetCache(string name, Func<object> func, bool isAbsoulute, bool isOverride, DateTime absoluteDate, TimeSpan spacing, CacheDependency dep, CacheItemRemovedCallback removeddCallback, CacheItemPriority priority)
        {
            Cache cache = HttpContext.Current.Cache;
            if (cache[name] != null)
            {
                return cache[name];
            }
            else
            {
                object obj = func();
                Insert(name, obj, isAbsoulute, isOverride, absoluteDate, spacing, dep, removeddCallback, priority);
                return obj;
            }
        }

        /// <summary>
        /// 内部方法
        /// </summary>        
        static void InsertInternal(string name, object value, bool isAbsoulute, DateTime absoluteDate, TimeSpan spacing, CacheDependency dep, CacheItemRemovedCallback callback, CacheItemPriority priority)
        {
            Cache cache = HttpContext.Current.Cache;
            if (isAbsoulute)
            {
                cache.Insert(name, value, dep, absoluteDate, TimeSpan.Zero, priority, callback);
            }
            else
            {
                cache.Insert(name, value, dep, DateTime.MaxValue, spacing, priority, callback);
            }
        }
    }
  • 相关阅读:
    关于DateFormater
    Swift 排查引用循环
    AutoLayout与UIbutton
    UIScrollView 在Autolayout下使用的一些问题
    sourceTree .gitignore文件处理
    Mp4V2与ffmpeg静态库符号冲突问题解决
    iOS 处理HLS视频流
    对于UITableView和UIImageView的DrawRect重写之后的影响
    UILabel的DrawDrect方法
    《iOS面试之道》-勘误2
  • 原文地址:https://www.cnblogs.com/mxw09/p/1836199.html
Copyright © 2011-2022 走看看