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; } } }