zoukankan      html  css  js  c++  java
  • 缓存常用操作

    using System;
    using System.Web.Caching;
    using System.Web;
    using System.Collections;
    using System.Text.RegularExpressions;
     
    namespace Tools
    {
        /// <summary>
        /// 缓存常用操作
        /// Autho       :SongBiao
        /// version     :1.4
        /// LastEditTime:2015-12-12
        /// </summary>
        public class CacheUtil
        {
            public CacheUtil()
            {
                //...在此处添加构造函数逻辑
            }
     
            /// <summary>
            /// 增加一个缓存对象
            /// </summary>
            /// <param name="strKey">键值名称</param>
            /// <param name="valueObj">被缓存对象</param>
            /// <param name="durationMin">缓存失效时间,默认为3分钟</param>
            /// <param name="priority">保留优先级(枚举数值),1最不会被清除,6最容易被内存管理清除,0为default
            /// 【1:NotRemovable;2:High;3:AboveNormal;4:Normal;5:BelowNormal;6:Low】</param>
            /// <returns>缓存写入是否成功true 、 false</returns>
            public static bool InsertCach(string strKey, object valueObj, int durationMin, int priority)
            {
                TimeSpan ts;
                if (strKey != null && strKey.Length != 0 && valueObj != null)
                {
                    //建立回调委托的一个实例
     
                    //onRemove是委托执行的函数,具体方法看下面的onRemove(...)
                    CacheItemRemovedCallback callBack = new CacheItemRemovedCallback(onRemove);
                    #region 失效时间设置
                    if (durationMin == 0)
                    {
                        ts = new TimeSpan(0, 3, 0);//如果不进行设置则为三分钟
                    }
                    else
                    {
                        ts = new TimeSpan(0, durationMin, 0);
                    }
                    #endregion
                    #region System.Web.Caching.Cache 对象中存储的项的相对优先级
     
                    CacheItemPriority cachePriority;
                    switch (priority)
                    {
                        case 6:
                            cachePriority = CacheItemPriority.Low;
                            break;
                        case 5:
                            cachePriority = CacheItemPriority.BelowNormal;
                            break;
                        case 4:
                            cachePriority = CacheItemPriority.Normal;
                            break;
                        case 3:
                            cachePriority = CacheItemPriority.AboveNormal;
                            break;
                        case 2:
                            cachePriority = CacheItemPriority.High;
                            break;
                        case 1:
                            cachePriority = CacheItemPriority.NotRemovable;
                            break;
                        default:
                            cachePriority = CacheItemPriority.Default;
                            break;
                    }
                    #endregion
                    HttpContext.Current.Cache.Insert(strKey, valueObj, null, DateTime.Now.Add(ts), System.Web.Caching.Cache.NoSlidingExpiration, cachePriority, callBack);
                    return true;
                }
                else
                {
                    return false;
                }
            }
     
            /// <summary>
            /// 判断缓存对象是否存在
            /// </summary>
            /// <param name="strKey">缓存键值名称</param>
            /// <returns>是否存在true 、false</returns>
            public static bool IsExist(string strKey)
            {
                return HttpContext.Current.Cache[strKey] != null;
            }
     
            /// <summary>
            /// 读取缓存对象
            /// </summary>
            /// <param name="strKey">缓存键值名称</param>
            /// <returns>缓存对象,objec类型</returns>
            public static object GetCache(string strKey)
            {//取出值
     
                if (HttpContext.Current.Cache[strKey] != null)
                {
                    object obj = HttpContext.Current.Cache[strKey];
                    if (obj == null)
                    {
                        return null;
                    }
                    else
                    {
                        return obj;
                    }
                }
                else
                {
                    return null;
                }
            }
     
            /// <summary>
            /// 删除缓存对象
            /// </summary>
            /// <param name="strKey">缓存键值名称</param>
            public static void Remove(string strKey)
            {
                if (HttpContext.Current.Cache[strKey] != null)
                {
                    HttpContext.Current.Cache.Remove(strKey);
                }
            }
     
            /// <summary>
            /// 根据设置的正则表达式清除缓存对象;
            /// 该方法使用正则匹配要删除的键值对象,如果键值命名统一规范,可批处理清除相关缓存数据O(∩_∩)O
            /// </summary>
            /// <param name="pattern">匹配键值的正则表达式</param>
            public static void RemoveByRegexp(string pattern)
            {
                if (pattern != "")
                {
                    IDictionaryEnumerator enu = HttpContext.Current.Cache.GetEnumerator();
                    while (enu.MoveNext())
                    {
                        string key = enu.Key.ToString();
                        if (Regex.IsMatch(key, pattern))
                        {
                            Remove(key);
                        }
                    }
                }
            }
     
            /// <summary>
            /// 清除所有缓存对象
            /// </summary>
            public static void Clear()
            {
                IDictionaryEnumerator enu = HttpContext.Current.Cache.GetEnumerator();
                while (enu.MoveNext())
                {
                    Remove(enu.Key.ToString());
                }
            }
     
            public static CacheItemRemovedReason reason;
            /// <summary>
            /// 此方法在值失效之前调用,可以用于在失效之前更新数据库,或从数据库重新获取数据
            /// </summary>
            /// <param name="strKey"></param>
            /// <param name="obj"></param>
            /// <param name="reason"></param>
            private static void onRemove(string strKey, object obj, CacheItemRemovedReason r)
            {
                reason = r;
            }
        }
     
     
    }
  • 相关阅读:
    神马搜索 面试小结
    我的第一篇paper
    【转载】技巧:Vim 的纵向编辑模式
    实习求职小结
    将博客园界面打造成Hexo经典主题Light
    试一下Markdown
    四色标记算法
    射雕三部曲的优美片段
    Docker
    Sublime Text 3 文档
  • 原文地址:https://www.cnblogs.com/hnsongbiao/p/5059574.html
Copyright © 2011-2022 走看看