• 自写缓存类


    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);
            }
        }
    }
  • 相关阅读:
    JavaWeb项目自动部署,持续集成
    hbase系列
    传输视频的带宽如何计算?传输4K视频需要多少带宽?
    TSINGSEE青犀视频通过Webrtc编译android版本找不到gzip模块如何处理?
    TSINGSEE青犀视频webrtc相关内容编译如何在c++端编码出H264?
    视频组网/网络穿透工具EasyNTS如何永久删除其中某个设备?
    音视频流媒体平台的开发,开源EasyDarwin为什么如此受欢迎?
    基于音视频的云会议为什么会迎来发展的大爆发?
    EasyRTC的Web开发过程中如何创建新的空分支?
    C# 会话,进程,线程,线程安全
  • 原文地址:https://www.cnblogs.com/mxw09/p/1836199.html
Copyright © 2020-2023  润新知