using System; using System.Collections; using System.Collections.Generic; using System.Linq; using System.Text.RegularExpressions; using System.Web; using System.Web.Caching; namespace ExportMap.cs { /// /// 缓存常用操作 /// public class CacheUtils { public static CacheItemRemovedReason reason; public CacheUtils() { } /// /// 增加一个缓存对象 /// /// 键值名称 /// 被缓存对象 /// 缓存失效时间,默认为3分钟 /// 保留优先级(枚举数值),1最不会被清除,6最容易被内存管理清除,0为default /// 【1:NotRemovable;2:High;3:AboveNormal;4:Normal;5:BelowNormal;6:Low】 /// 缓存写入是否成功true 、 false 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, 30, 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), Cache.NoSlidingExpiration, cachePriority, callBack); return true; } else { return false; } } /// /// 判断缓存对象是否存在 /// /// 缓存键值名称 /// 是否存在true 、false public static bool IsExist(string strKey) { return HttpContext.Current.Cache[strKey] != null; } /// /// 读取缓存对象 /// /// 缓存键值名称 /// 缓存对象,objec类型 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; } } /// /// 删除缓存对象 /// /// 缓存键值名称 public static void Remove(string strKey) { if (HttpContext.Current.Cache[strKey] != null) { HttpContext.Current.Cache.Remove(strKey); } } /// /// 根据设置的正则表达式清除缓存对象; /// 该方法使用正则匹配要删除的键值对象,如果键值命名统一规范,可批处理清除相关缓存数据O(∩_∩)O /// /// 匹配键值的正则表达式 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); } } } } /// /// 清除所有缓存对象 /// public static void Clear() { IDictionaryEnumerator enu = HttpContext.Current.Cache.GetEnumerator(); while (enu.MoveNext()) { Remove(enu.Key.ToString()); } } /// /// 此方法在值失效之前调用,可以用于在失效之前更新数据库,或从数据库重新获取数据 /// /// /// /// private static void onRemove(string strKey, object obj, CacheItemRemovedReason r) { reason = r; } } }