C#.NET Web缓存管理

 

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

 

posted @ 2010-07-20 11:00  熊哥  阅读(1196)  评论(1编辑  收藏  举报