Discuz!NT中集成Memcached分布式缓存
文章出处:DIY部落(http://www.diybl.com/course/3_program/cshapo/csharpsl/20100112/189244.html)
其实在之前的那篇关于Discuz!NT缓存架构的文章中已提到过,使用了设计模式中的“策略模式”来构造。所以为了与以往使用缓存的代码格式相兼容,所以这里采用新添加MemCachedStrategy(MemCached策略)来构造一个缓存策略类以便于当管理后台开启“MemCached”时以“MemCached策略模式”来做为当前系统默认
的策略模式。
其代码段如下(Discuz.Cache/MemCached.cs):
1 /// <summary>
2 /// MemCache缓存策略类
3 /// </summary>
4 public class MemCachedStrategy : Discuz.Cache.ICacheStrategy
5 {
6
7 /// <summary>
8 /// 添加指定ID的对象
9 /// </summary>
10 /// <param name="objId"></param>
11 /// <param name="o"></param>
12 public void AddObject(string objId, object o)
13 {
14 RemoveObject(objId);
15 if (TimeOut > 0)
16 {
17 MemCachedManager.CacheClient.Set(objId, o, System.DateTime.Now.AddMinutes(TimeOut));
18 }
19 else
20 {
21 MemCachedManager.CacheClient.Set(objId, o);
22 }
23 }
24
25 /// <summary>
26 /// 添加指定ID的对象(关联指定文件组)
27 /// </summary>
28 /// <param name="objId"></param>
29 /// <param name="o"></param>
30 /// <param name="files"></param>
31 public void AddObjectWithFileChange(string objId, object o, string[] files)
32 {
33 ;
34 }
35
36 /// <summary>
37 /// 添加指定ID的对象(关联指定键值组)
38 /// </summary>
39 /// <param name="objId"></param>
40 /// <param name="o"></param>
41 /// <param name="dependKey"></param>
42 public void AddObjectWithDepend(string objId, object o, string[] dependKey)
43 {
44 ;
45 }
46
47 /// <summary>
48 /// 移除指定ID的对象
49 /// </summary>
50 /// <param name="objId"></param>
51 public void RemoveObject(string objId)
52 {
53 if (MemCachedManager.CacheClient.KeyExists(objId))
54 MemCachedManager.CacheClient.Delete(objId);
55 }
56
57 /// <summary>
58 /// 返回指定ID的对象
59 /// </summary>
60 /// <param name="objId"></param>
61 /// <returns></returns>
62 public object RetrieveObject(string objId)
63 {
64 return MemCachedManager.CacheClient.Get(objId);
65 }
66
67 /// <summary>
68 /// 到期时间
69 /// </summary>
70 public int TimeOut { set; get; }
71 }
2 /// MemCache缓存策略类
3 /// </summary>
4 public class MemCachedStrategy : Discuz.Cache.ICacheStrategy
5 {
6
7 /// <summary>
8 /// 添加指定ID的对象
9 /// </summary>
10 /// <param name="objId"></param>
11 /// <param name="o"></param>
12 public void AddObject(string objId, object o)
13 {
14 RemoveObject(objId);
15 if (TimeOut > 0)
16 {
17 MemCachedManager.CacheClient.Set(objId, o, System.DateTime.Now.AddMinutes(TimeOut));
18 }
19 else
20 {
21 MemCachedManager.CacheClient.Set(objId, o);
22 }
23 }
24
25 /// <summary>
26 /// 添加指定ID的对象(关联指定文件组)
27 /// </summary>
28 /// <param name="objId"></param>
29 /// <param name="o"></param>
30 /// <param name="files"></param>
31 public void AddObjectWithFileChange(string objId, object o, string[] files)
32 {
33 ;
34 }
35
36 /// <summary>
37 /// 添加指定ID的对象(关联指定键值组)
38 /// </summary>
39 /// <param name="objId"></param>
40 /// <param name="o"></param>
41 /// <param name="dependKey"></param>
42 public void AddObjectWithDepend(string objId, object o, string[] dependKey)
43 {
44 ;
45 }
46
47 /// <summary>
48 /// 移除指定ID的对象
49 /// </summary>
50 /// <param name="objId"></param>
51 public void RemoveObject(string objId)
52 {
53 if (MemCachedManager.CacheClient.KeyExists(objId))
54 MemCachedManager.CacheClient.Delete(objId);
55 }
56
57 /// <summary>
58 /// 返回指定ID的对象
59 /// </summary>
60 /// <param name="objId"></param>
61 /// <returns></returns>
62 public object RetrieveObject(string objId)
63 {
64 return MemCachedManager.CacheClient.Get(objId);
65 }
66
67 /// <summary>
68 /// 到期时间
69 /// </summary>
70 public int TimeOut { set; get; }
71 }