分享通用基类库-C#通用缓存类

  1 /*************************************************************************************
2 * 代码:吴蒋
3 * 时间:2012.03.30
4 * 说明:缓存公共基类
5 * 其他:
6 * 修改人:
7 * 修改时间:
8 * 修改说明:
9 ************************************************************************************/
10 using System;
11 using System.Web.Caching;
12
13 namespace Common
14 {
15 public class DacheHelp
16 {
17 protected static volatile System.Web.Caching.Cache webCache = System.Web.HttpRuntime.Cache;
18
19 /// <summary>
20 /// 默认缓存存活期为3600秒(1小时)
21 /// </summary>
22 protected int _timeOut = 3600;
23
24 private static object syncObj = new object();
25
26 /// <summary>
27 /// 构造函数
28 /// </summary>
29 static DacheHelp()
30 {
31 }
32
33
34 /// <summary>
35 /// 设置到期相对时间[单位: 秒]
36 /// </summary>
37 public virtual int TimeOut
38 {
39 set { _timeOut = value > 0 ? value : 3600; }
40 get { return _timeOut > 0 ? _timeOut : 3600; }
41 }
42
43
44 /// <summary>
45 /// 静态构造函数
46 /// </summary>
47 public static System.Web.Caching.Cache GetWebCacheObj
48 {
49 get { return webCache; }
50 }
51
52 /// <summary>
53 /// 加入当前对象到缓存中
54 /// </summary>
55 /// <param name="objId">对象的键值</param>
56 /// <param name="o">缓存的对象</param>
57 public virtual void AddObject(string objId, object o)
58 {
59 if (objId == null || objId.Length == 0 || o == null)
60 {
61 return;
62 }
63
64 CacheItemRemovedCallback callBack = new CacheItemRemovedCallback(onRemove);
65
66 if (TimeOut == 7200)
67 {
68 webCache.Insert(objId, o, null, DateTime.MaxValue, TimeSpan.Zero, System.Web.Caching.CacheItemPriority.High, callBack);
69 }
70 else
71 {
72 webCache.Insert(objId, o, null, DateTime.Now.AddSeconds(TimeOut), System.Web.Caching.Cache.NoSlidingExpiration, System.Web.Caching.CacheItemPriority.High, callBack);
73 }
74 }
75
76 /// <summary>
77 /// 加入当前对象到缓存中
78 /// </summary>
79 /// <param name="objId">对象的键值</param>
80 /// <param name="o">缓存的对象</param>
81 public virtual void AddObjectWith(string objId, object o)
82 {
83 if (objId == null || objId.Length == 0 || o == null)
84 {
85 return;
86 }
87
88 CacheItemRemovedCallback callBack = new CacheItemRemovedCallback(onRemove);
89
90 webCache.Insert(objId, o, null, System.DateTime.Now.AddSeconds(TimeOut), System.Web.Caching.Cache.NoSlidingExpiration, System.Web.Caching.CacheItemPriority.High, callBack);
91 }
92
93
94 /// <summary>
95 /// 加入当前对象到缓存中,并对相关文件建立依赖
96 /// </summary>
97 /// <param name="objId">对象的键值</param>
98 /// <param name="o">缓存的对象</param>
99 /// <param name="files">监视的路径文件</param>
100 public virtual void AddObjectWithFileChange(string objId, object o, string[] files)
101 {
102 if (objId == null || objId.Length == 0 || o == null)
103 {
104 return;
105 }
106
107 CacheItemRemovedCallback callBack = new CacheItemRemovedCallback(onRemove);
108
109 CacheDependency dep = new CacheDependency(files, DateTime.Now);
110
111 webCache.Insert(objId, o, dep, System.DateTime.Now.AddSeconds(TimeOut), System.Web.Caching.Cache.NoSlidingExpiration, System.Web.Caching.CacheItemPriority.High, callBack);
112 }
113
114
115
116 /// <summary>
117 /// 加入当前对象到缓存中,并使用依赖键
118 /// </summary>
119 /// <param name="objId">对象的键值</param>
120 /// <param name="o">缓存的对象</param>
121 /// <param name="dependKey">依赖关联的键值</param>
122 public virtual void AddObjectWithDepend(string objId, object o, string[] dependKey)
123 {
124 if (objId == null || objId.Length == 0 || o == null)
125 {
126 return;
127 }
128
129 CacheItemRemovedCallback callBack = new CacheItemRemovedCallback(onRemove);
130
131 CacheDependency dep = new CacheDependency(null, dependKey, DateTime.Now);
132
133 webCache.Insert(objId, o, dep, System.DateTime.Now.AddSeconds(TimeOut), System.Web.Caching.Cache.NoSlidingExpiration, System.Web.Caching.CacheItemPriority.High, callBack);
134 }
135
136 /// <summary>
137 /// 建立回调委托的一个实例
138 /// </summary>
139 /// <param name="key"></param>
140 /// <param name="val"></param>
141 /// <param name="reason"></param>
142 public void onRemove(string key, object val, CacheItemRemovedReason reason)
143 {
144 switch (reason)
145 {
146 case CacheItemRemovedReason.DependencyChanged:
147 break;
148 case CacheItemRemovedReason.Expired:
149 {
150 //CacheItemRemovedCallback callBack = new CacheItemRemovedCallback(this.onRemove);
151
152 //webCache.Insert(key, val, null, System.DateTime.Now.AddMinutes(TimeOut),
153 // System.Web.Caching.Cache.NoSlidingExpiration,
154 // System.Web.Caching.CacheItemPriority.High,
155 // callBack);
156 break;
157 }
158 case CacheItemRemovedReason.Removed:
159 {
160 break;
161 }
162 case CacheItemRemovedReason.Underused:
163 {
164 break;
165 }
166 default: break;
167 }
168 //如需要使用缓存日志,则需要使用下面代码
169 //myLogVisitor.WriteLog(this,key,val,reason);
170 }
171
172 /// <summary>
173 /// 删除缓存对象
174 /// </summary>
175 /// <param name="objId">对象的关键字</param>
176 public virtual void RemoveObject(string objId)
177 {
178 if (objId == null || objId.Length == 0)
179 {
180 return;
181 }
182 webCache.Remove(objId);
183 }
184
185
186 /// <summary>
187 /// 返回一个指定的对象
188 /// </summary>
189 /// <param name="objId">对象的关键字</param>
190 /// <returns>对象</returns>
191 public virtual object RetrieveObject(string objId)
192 {
193 if (objId == null || objId.Length == 0)
194 {
195 return null;
196 }
197 return webCache.Get(objId);
198 }
199 }
200 }

 

posted @ 2012-03-30 13:26  吴蒋  阅读(895)  评论(0编辑  收藏  举报