using System; using System.Collections; using System.Text.RegularExpressions; using System.Web; using System.Web.Caching; using System.Collections.Generic; namespace Pub.Class { /// <summary> /// Web缓存管理 /// </summary> public class WebCache { #region 构造器 private WebCache() { } static WebCache() { HttpContext context = HttpContext.Current; if (context != null) { _cache = (Cache)context.Cache; } else { _cache = HttpRuntime.Cache; } } #endregion #region 公有靜态字段 /// <summary> /// 日缓存因子 /// </summary> public static readonly int DayFactor = 17280; /// <summary> /// 小时缓存因子 /// </summary> public static readonly int HourFactor = 720; /// <summary> /// 分缓存因子 /// </summary> public static readonly int MinuteFactor = 12; /// <summary> /// 秒缓存因子 /// </summary> public static readonly double SecondFactor = 0.2; #endregion #region 私有静态字段 private static readonly Cache _cache; /// <summary> /// 缓存因子 /// </summary> private static int Factor = 5; #endregion #region 静态方法 public static IList<CachedItem> GetList(){ IList<CachedItem> list = new List<CachedItem>(); IDictionaryEnumerator CacheEnum = _cache.GetEnumerator(); while (CacheEnum.MoveNext()) { list.Add(new CachedItem(CacheEnum.Key.ToString(),CacheEnum.Value.GetType().ToString())); } return list; } /// <summary> /// 重新设置缓存因子 /// </summary> /// <param name="cacheFactor"></param> public static void ReSetFactor(int cacheFactor) { Factor = cacheFactor; } /// <summary> /// 清空所有缓存项目 /// </summary> public static void Clear() { IDictionaryEnumerator CacheEnum = _cache.GetEnumerator(); ArrayList al = new ArrayList(); while (CacheEnum.MoveNext()) { al.Add(CacheEnum.Key); } foreach (string key in al){ _cache.Remove(key); } } /// <summary> /// 删除缓存 /// </summary> /// <param name="pattern">缓存键正则匹配模式</param> public static void RemoveByPattern(string pattern) { IDictionaryEnumerator CacheEnum = _cache.GetEnumerator(); Regex regex = new Regex(pattern, RegexOptions.IgnoreCase | RegexOptions.Singleline | RegexOptions.Compiled); while (CacheEnum.MoveNext()) { if (regex.IsMatch(CacheEnum.Key.ToString())) _cache.Remove(CacheEnum.Key.ToString()); } } /// <summary> /// 删除缓存 /// </summary> /// <param name="key">缓存键名</param> public static void Remove(string key) { _cache.Remove(key); } /// <summary> /// 增加缓存项目 /// </summary> /// <param name="key">缓存键名</param> /// <param name="obj">缓存对象</param> public static void Insert(string key, object obj) { Insert(key, obj, null, 1); } /// <summary> /// 增加缓存项目(缓存时间:小时缓存因子*12) /// </summary> /// <param name="key">缓存键名</param> /// <param name="obj">缓存对象</param> /// <param name="dep">缓存依赖荐</param> public static void Insert(string key, object obj, CacheDependency dep) { Insert(key, obj, dep, HourFactor * 12); } /// <summary> /// 增加缓存项目 /// </summary> /// <param name="key">缓存键名</param> /// <param name="obj">缓存对象</param> /// <param name="seconds">缓存秒数</param> public static void Insert(string key, object obj, int seconds) { Insert(key, obj, null, seconds); } /// <summary> /// 增加缓存项目 /// </summary> /// <param name="key">缓存键名</param> /// <param name="obj">缓存对象</param> /// <param name="seconds">缓存秒数</param> /// <param name="priority">缓存优先级</param> public static void Insert(string key, object obj, int seconds, CacheItemPriority priority) { Insert(key, obj, null, seconds, priority); } /// <summary> /// 增加缓存项目 /// </summary> /// <param name="key">缓存键名</param> /// <param name="obj">缓存对象</param> /// <param name="dep">缓存依赖项</param> /// <param name="seconds">缓存秒数</param> public static void Insert(string key, object obj, CacheDependency dep, int seconds) { Insert(key, obj, dep, seconds, CacheItemPriority.Normal); } /// <summary> /// 增加缓存 /// </summary> /// <param name="key">缓存键名</param> /// <param name="obj">缓存对象</param> /// <param name="dep">缓存依赖项</param> /// <param name="seconds">缓存秒数</param> /// <param name="priority">缓存优先级</param> public static void Insert(string key, object obj, CacheDependency dep, int seconds, CacheItemPriority priority) { if (obj != null) { _cache.Insert(key, obj, dep, DateTime.Now.AddSeconds(Factor * seconds), Cache.NoSlidingExpiration, priority, null); } } /// <summary> /// 微小缓存 /// </summary> /// <param name="key">缓存键名</param> /// <param name="obj">缓存对象</param> /// <param name="secondFactor">缓存秒因子</param> public static void MicroInsert(string key, object obj, int secondFactor) { if (obj != null) { _cache.Insert(key, obj, null, DateTime.Now.AddSeconds(Factor * secondFactor), Cache.NoSlidingExpiration); } } /// <summary> /// 增加缓存项目 /// </summary> /// <param name="key"></param> /// <param name="obj"></param> public static void Max(string key, object obj) { Max(key, obj, null); } /// <summary> /// 最大缓存对象 /// </summary> /// <param name="key">缓存键名</param> /// <param name="obj">缓存对象</param> /// <param name="dep">缓存依赖项</param> public static void Max(string key, object obj, CacheDependency dep) { if (obj != null) { _cache.Insert(key, obj, dep, DateTime.MaxValue, Cache.NoSlidingExpiration, CacheItemPriority.AboveNormal, null); } } /// <summary> /// 获取缓存对象 /// </summary> /// <param name="key">缓存键名</param> /// <returns>返回缓存对象</returns> public static object Get(string key) { return _cache[key]; } /// <summary> /// 根据秒缓存因子计算秒数 /// </summary> public static int SecondFactorCalculate(int seconds) { return Convert.ToInt32(Math.Round((double)seconds * SecondFactor)); } #endregion } }