`
baiyuxiong
  • 浏览: 177917 次
  • 性别: Icon_minigender_1
  • 来自: 西安
社区版块
存档分类
最新评论

discuz x 1.5缓存机制分析

    博客分类:
  • php
阅读更多
前面分析了DZX的执行流程,里面提到,在调用模板前DZ会准备好数据,而模板被编译后就会去取准备好的数据。这篇文件主要分析下,DZ是如果保存准备好的数据的。即数据的缓存。
dzx首先会去数据库里取到所需要的数据,然后调用source\function\function_core.php里的memory方法处理缓存。其中memory方法支持三种缓存的处理方式,get,set,rm,get方式会从缓存里取数据,set方式将数据存入缓存,而rm方式则是删除缓存里的数据。当dzx取到数据时,首先会调用memory方法的set操作,把数据保存在内存里。这个保存过程是怎样的呢?
memory方法里调用了discuz_memory(source\class\class_core.php文件中)类的get set rm方法,而这三个方法接着调用了discuz_memcache类的对应方法,discuz_memcache类又调用了Memcache类的方法,Memcache继承自MemcachePool。我个人觉得DZ最后应该是用到memcached这个开源的缓存系统了,不过不明白的是,Memcache和MemcachePool类的get set等方法均没有实现,只有一个空函数。我的电脑也没装过memcached,还没弄清楚是怎么回事。
保存进缓存后,再取出来就方便了,如:
$ret = memory('get', 'forum_index_page_'.$groupid);

下面再讲一点,对每次请求,DZX怎么知道要准备哪些数据呢?这主要是在上文讲到的几个入口文件里定义的。
对于广场(论坛)模块,就定义在forum.php里。

//这个变量保存了所有论坛模块里要用到的需要初始化的数据
$modcachelist = array(
	'index'		=> array('announcements', 'onlinelist', 'forumlinks', 'advs_index',
			'heats', 'historyposts', 'onlinerecord', 'userstats'),
	'forumdisplay'	=> array('smilies', 'announcements_forum', 'globalstick', 'forums',
			'icons', 'onlinelist', 'forumstick','threadtable_info', 'threadtableids', 'stamps'),
	'viewthread'	=> array('smilies', 'smileytypes', 'forums', 'usergroups', 'ranks',
			'stamps', 'bbcodes', 'smilies',	'custominfo', 'groupicon', 'stamps',
			'threadtableids', 'threadtable_info'),
	'post'		=> array('bbcodes_display', 'bbcodes', 'smileycodes', 'smilies', 'smileytypes',
			'icons', 'domainwhitelist'),
	'space'		=> array('fields_required', 'fields_optional', 'custominfo'),
	'group'		=> array('grouptype'),
);

//默认mod是index
$mod = !in_array($discuz->var['mod'], $modarray) ? 'index' : $discuz->var['mod'];

define('CURMODULE', $mod != 'redirect' ? $mod : 'viewthread');
$cachelist = array();
if(isset($modcachelist[CURMODULE])) {
//默认这里$cachelist = $modcachelist['index'];
	$cachelist = $modcachelist[CURMODULE];
}
if($discuz->var['mod'] == 'group') {
	$_G['basescript'] = 'group';
}

//初始化缓存时会完成$modcachelist['index']中所有列出的功能点的数据的初始化
$discuz->cachelist = $cachelist;
$discuz->init();

source\class\class_core.php中的discuz_core的_init_setting方法中有句话:
!empty($this->cachelist) && loadcache($this->cachelist);

这个loadcache就会完成所有$cachelist中列出的需要数据的初始化工作。loadcache最后会调用到source\function\function_core.php的cachedata方法,cachedata会去common_syscache表里取数据。
不过这里取的只是一些系统缓存。还不清楚其它数据是怎么取的。改天继续研究吧。

可能写的有不对的地方,欢迎指正。
分享到:
评论

相关推荐

    discuz x1.5经典版

    X1.5引入了高效的缓存机制,有效提升了系统响应速度,降低了服务器负载,保证了大流量下的稳定运行。 二、文件结构解析 在压缩包内,我们可以看到三个主要文件夹:utility、upload和readme。 1. utility:这个...

    Discuz_X1.5_SC_UTF8

    同时,系统还提供了缓存机制,以提高页面加载速度,降低服务器负载。 综上所述,Discuz_X1.5_SC_UTF8是一个强大且易用的社区论坛解决方案,结合PHP技术和UTF-8编码,为建立中文社区提供了全面的功能和支持。通过...

    Discuz_X1.5正式版

    X1.5的运行机制和使用技巧。 在运营阶段,Discuz! X1.5提供了丰富的插件和模板系统,允许用户定制论坛界面和扩展功能。例如,你可以通过安装社交分享插件增强论坛的互动性,或者通过更换模板改变论坛的整体风格,...

    discuz x1.5 插件开发

    X1.5 插件与模块开发指南》 Discuz! X1.5 是一款流行的社区论坛软件,以其强大的功能和灵活的扩展性受到广大用户的喜爱。插件开发与模块开发是Discuz!系统中两个重要的自定义化方式,允许用户根据自身需求对论坛...

    Discuz!X1.5门户

    9. **缓存机制**:为了提高性能,Discuz! 采用缓存技术,将常用数据存储在内存中,减少数据库查询,提高页面加载速度。 10. **数据库操作**:门户系统与数据库紧密相连,涉及SQL查询、数据表结构和数据处理,是系统...

    Discuz! X1.5个人信息美化

    X1.5个人信息美化是一个针对Discuz! 论坛系统进行用户界面和会员资料展示优化的项目。Discuz! 是一个广泛使用的开源PHP论坛软件,它提供了丰富的社区功能,让网站管理员能够轻松搭建和管理自己的在线讨论平台。在...

    Discuz-X1.5-SC-UTF8

    - **缓存机制**:通过缓存技术提高页面加载速度,改善用户体验。 5. **升级与维护**: - **版本更新**:Discuz!会不定期发布新版本,修复已知问题,增加新功能,用户应及时升级以保持系统安全稳定。 - **技术...

    discuz X1.5二次开发必读(程序目录和文件列表)

    X1.5 二次开发指南:程序目录与文件详解 #### 一、Discuz! X1.5 系统结构概览 Discuz! X1.5 是一款专业的网站平台,集成了BBS论坛、SNS社交网络、门户页面、群组功能以及开放平台(OpenPlatform),为用户提供一...

    仿克米橙色风格改蓝色模板Discuz! X1.5.rar

    X1.5风格简介:  1. 安装后可以快速的把您的论坛变成一个Home页 论坛风格的整合门户;  2. 使用DZX特有的DIY数据调用功能实现内容的所有调用,设置简单容易上手;  3. 数据调用采用DZX默认缓存机制,使Home页...

    Discuz! X1.5二次开发 模板制作,二次开发 规范 Discuz!X1 程序目录和文件列表详解

    X1.5 二次开发及模板制作详解 #### 一、Discuz! X1.5 简介 Discuz! X1.5 是一款基于社区的建站平台,它集成了论坛(BBS)、社交网络(SNS)、门户(Portal)、群组(Group)以及开放平台(Open Platform)等多种...

    discuzx1.5的复制功能

    X1.5可能采用了异步处理和缓存策略,以减少服务器负载并提升用户体验。 总结,Discuz! X1.5的复制功能是其人性化设计的体现,通过结合浏览器内置机制和自定义的JavaScript库,实现了高效、安全的复制操作。无论是...

    Discuz! X1.5 仿克米原创橙色改蓝色模板 【11月7日凌晨,已修复所有已知错误】

    3. 数据调用采用DZX默认缓存机制,使Home页不会增加论坛负荷, 打开速度不受影响; 4. 所有调用图片自动生成缩略图功能, 有效解决调用图片变形失真的问题烦恼, 在打开速度上也有一定的提高; 5. 自动识别后台是否开启伪...

    discuz discuz 架构分析

    1. 缓存机制:缓存用户信息、热门帖子等常用数据,减少数据库查询,提高响应速度。 2. 数据分表:对于大规模论坛,Discuz! 会进行数据分表,分散负载,提高数据库性能。 五、安全机制 Discuz! 在代码层面实现了SQL...

    DX1.5 手机正式版

    $discuz = & discuz_core::instance();//实例化 使用此种方法是为了兼容PHP4 与PHP5 复制代码 这里我们进到./source/class/class_core.php 看看这个核心类 首先来分别看看这些属性 var $db = null;//存储数据库对象 ...

Global site tag (gtag.js) - Google Analytics