【discuzX2】缓存机制分析
来源:互联网 发布:mfi 指标算法 编辑:程序博客网 时间:2024/05/22 00:45
前言
- 缓存机制简单的说就是将一些重复操作的结果集保存下来,在收到同样的操作时直接从缓存的结果集中取出相应的数据直接使用,这样做的好处是降低重复性的解析或者SQL查询之类的动作,从而有效的缓解服务器的压力。
缓存类型
- 在DiscuzX中用到了模板缓存、文件缓存、数据缓存的缓存方法。
模板缓存
- 在Discuz产品中采用的是预编译的缓存机制,当程序调用模板过程中先去检测是否已经存在缓存,如果存在已编译后的模板文件,则直接调用编译的后的模板缓存。否则进行一次模板编译,工作原理如下:
文件缓存
- 在config\config_global.php中有这么一个配置
$_config['cache']['type'] = 'sql';// 缓存类型 file=文件缓存, sql=数据库缓存
- 当这个配置改成file时,Discuz生成的缓存将通过方法写入文件中。文件缓存存储在“data\cache”目录下,使用文件缓存的好处是,当你的服务器存在MySQL压力较高时,可以通过file的缓存机制缓解MySQL的压力,这种的缓存机制是用服务器的IO来换取MySQL的读写频率。降低MySQL的压力。
- 生成的缓存文件存储方式如下:
<?php//Discuz! cache file, DO NOT modify me!//Identify: 964f76bca4d88d77c295870f0dc0c9c3$domain = array ( 'defaultindex' => 'portal.php', 'holddomain' => 'www|*blog*|*space*|*bbs*', 'list' => array ( 'aaaa.bbs.cndoing.org' => array ( 'id' => '1', 'idtype' => 'subarea', ), ), 'app' => array ( 'portal' => '', 'forum' => '', 'group' => '', 'home' => '', 'mobile' => '', 'default' => '', ), 'root' => array ( 'home' => '', 'group' => '', 'forum' => '', 'topic' => '', 'channel' => '', ),);?>
- 这样在程序调用时直接引入缓存文件就可以调用了。
数据缓存
目前Discuz!中支持的内存优化接口有 Memcache、eAccelerator、Xcache 三种,当你的服务器中安装了其中的任一一个缓存插件后,可以通过配置config\config_global.php来开启缓存,配置项如下:
//内存变量前缀, 可更改,避免同服务器中的程序引用错乱$_config['memory']['prefix'] = 'discuz_';$_config['memory']['eaccelerator'] = 1;// 启动对 eaccelerator 的支持$_config['memory']['xcache'] = 0;// 启动对 xcache 的支持$_config['memory']['memcache']['server'] = '';// memcache 服务器地址$_config['memory']['memcache']['port'] = 11211;// memcache 服务器端口$_config['memory']['memcache']['pconnect'] = 1;// memcache 是否长久连接$_config['memory']['memcache']['timeout'] = 1;// memcache 服务器连接超时
缓存原理
- 缓存更新原理如下
- 以下是缓存的工作原理,在开发过程中当你调用到缓存时,只需要确认你要使用的缓存名称,然后调用loadcache($cachenames, $force)就可以获取到你原先保存的缓存内容
缓存调用
- 缓存调用方式可以直接传给loadcache($cachenames, $force = false)一个缓存名称后就可以获取到缓存数据。例如:
loadcache('plugin');
执行上面的调用后就可以在$_G['cache']['plugin']中获取到相应的缓存数据
- 缓存更新,在你对相应的缓存数据操作完后只需要调用updatecache($cachename = ), 传给要更新的缓存名称,新的缓存数据就会通过相应的脚本生成新的缓存数据
例如:
updatecache('plugin');
- 【discuzX2】缓存机制分析
- discuzX2缓存技术分析1
- DiscuzX2.5 帖子页面更新浏览量 缓存机制
- 【discuzX2】目录结构分析
- 【discuzX2】/source/class/class_core.php文件中核心高效缓存类discuz_memory分析
- Discuz缓存机制分析
- Hibernate缓存机制分析
- SDWebImage 缓存机制分析
- hibernate缓存机制分析
- Mybaits缓存机制分析
- 【discuzX2】模板缓存及CSS缓存
- 分析Hibernate的缓存机制
- 分析Hibernate的缓存机制
- 分析Hibernate的缓存机制
- 分析Hibernate的缓存机制
- [转] Discuz缓存机制分析
- 分析Hibernate的缓存机制
- 分析Hibernate的缓存机制
- CPU位数、操作系统位数和编译器位数关系
- 指针的疑问
- Java中的值传递和引用传递
- C编写的调试宏
- Xcode 配置SVN 几点注意的问题
- 【discuzX2】缓存机制分析
- js中的||(或)运算究竟返回什么?
- Android软件架构及子系统介绍
- 什么是网站开发?
- android java.lang.UnsatisfiedLinkError: 分析及解决方法
- 3个重要的配置文件
- java 加减乘除错误
- 令人神清气爽的shooow
- html文件中引入js代码