分享通用基类库-C#通用缓存类
2012-03-30 13:37
260 查看
/************************************************************************************* * 代码:吴蒋 * 时间:2012.03.30 * 说明:缓存公共基类 * 其他: * 修改人: * 修改时间: * 修改说明: ************************************************************************************/ using System; using System.Web.Caching; namespace Common { public class DacheHelp { protected static volatile System.Web.Caching.Cache webCache = System.Web.HttpRuntime.Cache; /// <summary> /// 默认缓存存活期为3600秒(1小时) /// </summary> protected int _timeOut = 3600; private static object syncObj = new object(); /// <summary> /// 构造函数 /// </summary> static DacheHelp() { } /// <summary> /// 设置到期相对时间[单位: 秒] /// </summary> public virtual int TimeOut { set { _timeOut = value > 0 ? value : 3600; } get { return _timeOut > 0 ? _timeOut : 3600; } } /// <summary> /// 静态构造函数 /// </summary> public static System.Web.Caching.Cache GetWebCacheObj { get { return webCache; } } /// <summary> /// 加入当前对象到缓存中 /// </summary> /// <param name="objId">对象的键值</param> /// <param name="o">缓存的对象</param> public virtual void AddObject(string objId, object o) { if (objId == null || objId.Length == 0 || o == null) { return; } CacheItemRemovedCallback callBack = new CacheItemRemovedCallback(onRemove); if (TimeOut == 7200) { webCache.Insert(objId, o, null, DateTime.MaxValue, TimeSpan.Zero, System.Web.Caching.CacheItemPriority.High, callBack); } else { webCache.Insert(objId, o, null, DateTime.Now.AddSeconds(TimeOut), System.Web.Caching.Cache.NoSlidingExpiration, System.Web.Caching.CacheItemPriority.High, callBack); } } /// <summary> /// 加入当前对象到缓存中 /// </summary> /// <param name="objId">对象的键值</param> /// <param name="o">缓存的对象</param> public virtual void AddObjectWith(string objId, object o) { if (objId == null || objId.Length == 0 || o == null) { return; } CacheItemRemovedCallback callBack = new CacheItemRemovedCallback(onRemove); webCache.Insert(objId, o, null, System.DateTime.Now.AddSeconds(TimeOut), System.Web.Caching.Cache.NoSlidingExpiration, System.Web.Caching.CacheItemPriority.High, callBack); } /// <summary> /// 加入当前对象到缓存中,并对相关文件建立依赖 /// </summary> /// <param name="objId">对象的键值</param> /// <param name="o">缓存的对象</param> /// <param name="files">监视的路径文件</param> public virtual void AddObjectWithFileChange(string objId, object o, string[] files) { if (objId == null || objId.Length == 0 || o == null) { return; } CacheItemRemovedCallback callBack = new CacheItemRemovedCallback(onRemove); CacheDependency dep = new CacheDependency(files, DateTime.Now); webCache.Insert(objId, o, dep, System.DateTime.Now.AddSeconds(TimeOut), System.Web.Caching.Cache.NoSlidingExpiration, System.Web.Caching.CacheItemPriority.High, callBack); } /// <summary> /// 加入当前对象到缓存中,并使用依赖键 /// </summary> /// <param name="objId">对象的键值</param> /// <param name="o">缓存的对象</param> /// <param name="dependKey">依赖关联的键值</param> public virtual void AddObjectWithDepend(string objId, object o, string[] dependKey) { if (objId == null || objId.Length == 0 || o == null) { return; } CacheItemRemovedCallback callBack = new CacheItemRemovedCallback(onRemove); CacheDependency dep = new CacheDependency(null, dependKey, DateTime.Now); webCache.Insert(objId, o, dep, System.DateTime.Now.AddSeconds(TimeOut), System.Web.Caching.Cache.NoSlidingExpiration, System.Web.Caching.CacheItemPriority.High, callBack); } /// <summary> /// 建立回调委托的一个实例 /// </summary> /// <param name="key"></param> /// <param name="val"></param> /// <param name="reason"></param> public void onRemove(string key, object val, CacheItemRemovedReason reason) { switch (reason) { case CacheItemRemovedReason.DependencyChanged: break; case CacheItemRemovedReason.Expired: { //CacheItemRemovedCallback callBack = new CacheItemRemovedCallback(this.onRemove); //webCache.Insert(key, val, null, System.DateTime.Now.AddMinutes(TimeOut), // System.Web.Caching.Cache.NoSlidingExpiration, // System.Web.Caching.CacheItemPriority.High, // callBack); break; } case CacheItemRemovedReason.Removed: { break; } case CacheItemRemovedReason.Underused: { break; } default: break; } //如需要使用缓存日志,则需要使用下面代码 //myLogVisitor.WriteLog(this,key,val,reason); } /// <summary> /// 删除缓存对象 /// </summary> /// <param name="objId">对象的关键字</param> public virtual void RemoveObject(string objId) { if (objId == null || objId.Length == 0) { return; } webCache.Remove(objId); } /// <summary> /// 返回一个指定的对象 /// </summary> /// <param name="objId">对象的关键字</param> /// <returns>对象</returns> public virtual object RetrieveObject(string objId) { if (objId == null || objId.Length == 0) { return null; } return webCache.Get(objId); } } }
相关文章推荐
- 分享通用基类库-C#通用缓存类
- 分享通用基类库-C#通用字符串处理类
- 分享通用基类库-C#重写微软的SQLHELP的数据库操作基类
- 分享通用基类库-C#重写微软的SQLHELP的数据库操作基类
- 分享一个C#通用的json操作类
- 分享通用基类库-转载微软的数据操作类SQLHELP
- C#数据缓存介绍及Caching通用帮助类整理
- 分享通用基类库-转载微软的数据操作类SQLHELP
- Go/Python/Erlang编程语言对比分析及示例 基于RabbitMQ.Client组件实现RabbitMQ可复用的 ConnectionPool(连接池) 封装一个基于NLog+NLog.Mongo的日志记录工具类LogUtil 分享基于MemoryCache(内存缓存)的缓存工具类,C# B/S 、C/S项目均可以使用!
- 微信开发之微信分享 node.js直接使用、C#、 java 通用
- C#.NET 大型通用信息化系统集成快速开发平台 4.1 版本 - 用户表的设计思想分享[教师、职工、学生]
- C#通用邮件发送类分享
- 分享基于MemoryCache(内存缓存)的缓存工具类,C# B/S 、C/S项目均可以使用!
- Asp.net中打造通用数据访问类(c#)[转]
- C#调用百度地图API经验分享(一)
- [分享]C#读取Web.config文件
- C#无限栏目分级程序代码分享 好东西第1/3页
- C#实现插件式开发的一个Demo分享
- 分享在项目中用到的一个用于管理缓存文件的模块
- C#通用类库--DOS常用命令