1 / 5
文档名称:

Discuz NT跨站缓存同步.doc

格式:doc   大小:28KB   页数:5页
下载后只包含 1 个 DOC 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

分享

预览

Discuz NT跨站缓存同步.doc

上传人:rdwiirh 2018/8/13 文件大小:28 KB

下载得到文件列表

Discuz NT跨站缓存同步.doc

相关文档

文档介绍

文档介绍:Discuz NT跨站缓存同步
Discuz!NT跨站缓存同步
参考文章:Discuz!NT缓存设计简析Discuz!NT中集成Memcached分布式缓存在Discuz!NT中进行缓存分层(本地缓存+memcached)在之前的文章中,提到了在Discuz!NT中进行缓存分层的概念。之前在产品中也实现了其中的构想,但该方案有一个问题,就是如果将产品进行分布式布署之后,如果某一站点发生数据变化时,只能更新本地缓存和Memcached缓存信息,而其它分布式布署的站点则无法收到缓存数据已修改的'通知',导致数据不同步而成为'脏数据'。虽然在之前的文章中提到通过将本地缓存失效时间'缩短'(比如15秒后即失效),以便在相对较短的时间内让本地数据失效从而再次从Memcached读取最新的数据,但这必定不符合我们设计的基本思路,并且导致程序的运行效率低,同时会造成过于频繁的访问Memcached,无形中增加了与Memcached的socket开销。所以才有了今天的这篇文章。首先要说明的是,这个方案只有Discuz!NT的企业版(EntLib)中提供,所以在普通的版本中是找不到它的影子的,下面我就简要说明一下其实现思路。因为在传统的WEB应用开发中,一般都是采用get的方式来获得所需要的数据,也就是通过从客户端向服务端发送get请求来获得数据。而如果要实现下面的流程:
当本地缓存数据变化--更新memcached--(通知notify)其它分布式应用这里我借助主动发送的模式来实现,为了便于理解,我这里将memcached变成服务端,将分布式布署的应用看成是一个个'客户端',而当'客户端'将数据更新到memcached时,通过发送http通知的方式来通知其它'客户端',所以我们要实现的代码包括两部分,一部分实现上面流程中的'将本地数据变化告之到memcached'。这块代码已在之前的文章中被实现了,而我们只要在相应的'RemoveObject'方法后跟上一行'通知其它分布式应用'即可(\Memcached\),如下面所示:
代码
///summary///移除指定ID的对象////summary///param name="objId"/param public override void RemoveObject(string objId){//先移除本地cached,然后再移除memcached中的相应数据if (objId)!=null (objId);if((objId))(objId);(objId);//通知其它分布式应用}下面就是'同步其它分布式应用缓存数据'的代码了。在介绍代码之前,先要将'发送缓存数据修改通知'的设计思想介绍一下:,它主要是一链接串,比如下面这个格式(用逗号分割):
SiteUrl/SiteUrl我们需要将上面的链接串