文档介绍:Discuz!NT 中集成 Memcached 分布式缓存大约在两年前我写过一篇关于 Discuz!NT 缓存架构的文章, 在那篇文章的结尾介绍了在 IIS 中如果开启多个应用程序池会造成多个缓存实例之间数据同步的问题。虽然给出了一个解决方案, 但无形中却把压力转移到了磁盘 I/O 上( 多个进程并发访问 文件)。其实从那时起我就开始关注有什么更好的方案, 当然今天本文中所说的 Memcached , 以及 Velocity 等这类的分布式缓存方案之前都考虑过,但一直未能决定该使用那个。起码 Velocity 之后才会提供,虽然是原生态,但有些远水解不了近火。我想真正等到 Velocity 能堪当重任还要等上一段时间。于是我就开始将注意力转移到了 Memcached, 必定有 Facebook 这只“超级小白鼠”使用它并且反响还不错。所以就开始尝试动手在产品中集成 Memcached 。其实在之前的那篇关于 Discuz!NT 缓存架构的文章中已提到过, 使用了设计模式中的“策略模式”来构造。所以为了与以往使用缓存的代码格式相兼容,所以这里采用新添加 MemCachedStrategy(MemCached 策略) 来构造一个缓存策略类以便于当管理后台开启“ MemCached ”时以“ MemCached 策略模式”来做为当前系统默认的策略模式。其代码段如下( ): /// <summary> /// MemCache 缓存策略类/// </summary> public class MemCachedStrategy : { /// <summary> /// 添加指定 ID 的对象/// </summary> /// <param name="objId"></param> /// <param name="o"></param> public void AddObject( string objId, object o) { RemoveObject(objId); if (TimeOut >0) { (objId, o, (TimeOut)); } else { (objId, o); }} /// <summary> /// 添加指定 ID 的对象( 关联指定文件组) /// </summary> /// <param name="objId"></param> /// <param name="o"></param> /// <param name="files"></param> public void AddObjectWithFileChange( string objId, object o, strin g [] files) {;} /// <summary> /// 添加指定 ID 的对象( 关联指定键值组) /// </summary> /// <param name="objId"></param> /// <param name="o"></param> /// <param name="dependKey"></param> public void AddObjectWithDepend( string objId, object o, string [] dependKey) {;} /// <summary> /// 移除指定 ID 的对象/// </summary> /// <param name="objId"></param> public void RemoveObject( string objId) { if ((objId)) (objId); } /// <summary> /// 返回指定 ID 的对象/// </summary> /// <param name="objId"></param> /// <returns></returns> public object RetrieveObject( string objId) { return (objId); } /// <summary> /// 到期时间/// </s