当然,做完这一步之后就是对调用“缓存策略”的主体类进行修改来,使其根据对管理后台的设计来决定 加载什么样的缓存策略,如下: /// <summary>
/// Discuz!NT缓存类 /// 对Discuz!NT论坛缓存进行全局控制管理 /// </summary> public class DNTCache { . //通过该变量决定是否启用MemCached private static bool applyMemCached = MemCachedConfigs.GetConfig().ApplyMemCached; /// <summary> /// 构造函数 /// </summary> private DNTCache() { if (applyMemCached) cs = new MemCachedStrategy(); else { cs = new DefaultCacheStrategy(); objectXmlMap = rootXml.CreateElement("Cache"); //建立内部XML文档. rootXml.AppendChild(objectXmlMap); //LogVisitor clv = new CacheLogVisitor(); //cs.Accept(clv); cacheConfigTimer.AutoReset = true; cacheConfigTimer.Enabled = true; cacheConfigTimer.Elapsed += new System.Timers.ElapsedEventHandler(Timer_Elapsed); cacheConfigTimer.Start(); } } 到这里,主要的开发和修改基本上就告一段落了。下面开始介绍一下如果使用Stats命令来查看缓存的 分配和使用等情况。之前在枚举类型Stats中看到该命令有几个主要的参数,分别是: stats
stats reset stats malloc stats maps stats sizes stats slabs stats items stats cachedump slab_id limit_num stats detail [on|off|dump] 而JAVAEYE的 robbin 写过一篇文章:贴一段遍历memcached缓存对象的小脚本,来介绍如何使用其中的 “stats cachedump”来获取信息。受这篇文章的启发,我将MemCachedClient.cs文件中的Stats方法加以修 改,添加了一个command参数(字符串型),这样就可以向缓存服务器发送上面所说的那几种类型的命令了。 测试代码如下: protected void Submit_Click(object sender, EventArgs e)
{ ArrayList arrayList = new ArrayList(); arrayList.Add("10.0.1.52:11211");//缓存服务器的地址 StateResult.DataSource = MemCachedManager.GetStats(arrayList, (MemCachedManager.Stats) Utils.StrToInt(StatsParam.SelectedValue, 0), Param.Text); StateResult.DataBind(); } 页面代码如下:
我这样做的目的有两个,一个是避免每次都使用telnet协议远程登陆缓存服务器并输入相应的命令行 参数(我记忆力不好,参数多了之后就爱忘)。二是将来会把这个页面功能内置到管理后台上,以便后台 管理员可以动态监测每台缓存服务器上的数据。 好了,到这里今天的内容就差不多了。在本文中我们看到了使用设计模式的好处,通过它我们可以让 自己写的代码支持“变化”。这里不妨再多说几句,大家看到了velocity在使用上也是很方便,如果可以 的话,未来可以也会将velocity做成一个“缓存策略”,这样站长或管理员就可以根据自己公司的实际情 况来加以灵活配置了。 (责任编辑:admin) |