Discuz教程网

[插件制作] Discuz X2插件制作之缓存机制

[复制链接]
authicon dly 发表于 2011-5-4 11:07:32 | 显示全部楼层 |阅读模式
前言
缓存机制简单的说就是将一些重复操作的结果集保存下来,在收到同样的操作时直接从缓存的结果集中取出相应的数据直接使用,这样做的好处是降低重复性的解析或者SQL查询之类的动作,从而有效的缓解服务器的压力。
缓存类型
在DiscuzX中用到了模板缓存、文件缓存、数据缓存的缓存方法。
模板缓存
在Discuz产品中采用的是预编译的缓存机制,当程序调用模板过程中先去检测是否已经存在缓存,如果存在已编译后的模板文件,则直接调用编译的后的模板缓存。否则进行一次模板编译,工作原理如下:


文件缓存
在config\config_global.php中有这么一个配置

  1. $_config['cache']['type'] = 'sql';        // 缓存类型 file=文件缓存, sql=数据库缓存
复制代码

当这个配置改成file时,Discuz生成的缓存将通过方法写入文件中。文件缓存存储在“data\cache”目录下,使用文件缓存的好处是,当你的服务器存在MySQL压力较高时,可以通过file的缓存机制缓解MySQL的压力,这种的缓存机制是用服务器的IO来换取MySQL的读写频率。降低MySQL的压力。
生成的缓存文件存储方式如下:

  1. <?php
  2. //Discuz! cache file, DO NOT modify me!
  3. //Identify: 964f76bca4d88d77c295870f0dc0c9c3

  4. $domain = array (
  5.   'defaultindex' => 'portal.php',
  6.   'holddomain' => 'www|*blog*|*space*|*bbs*',
  7.   'list' =>
  8.   array (
  9.     'aaaa.bbs.cndoing.org' =>
  10.     array (
  11.       'id' => '1',
  12.       'idtype' => 'subarea',
  13.     ),
  14.   ),
  15.   'app' =>
  16.   array (
  17.     'portal' => '',
  18.     'forum' => '',
  19.     'group' => '',
  20.     'home' => '',
  21.     'mobile' => '',
  22.     'default' => '',
  23.   ),
  24.   'root' =>
  25.   array (
  26.     'home' => '',
  27.     'group' => '',
  28.     'forum' => '',
  29.     'topic' => '',
  30.     'channel' => '',
  31.   ),
  32. );
  33. ?>
复制代码


这样在程序调用时直接引入缓存文件就可以调用了。
数据缓存
目前Discuz!中支持的内存优化接口有 Memcache、eAccelerator、Xcache 三种,当你的服务器中安装了其中的任一一个缓存插件后,可以通过配置config\config_global.php来开启缓存,配置项如下:

//内存变量前缀, 可更改,避免同服务器中的程序引用错乱

  1. $_config['memory']['prefix'] = 'discuz_';

  2. $_config['memory']['eaccelerator'] = 1;                                // 启动对 eaccelerator 的支持
  3. $_config['memory']['xcache'] = 0;                                // 启动对 xcache 的支持
  4. $_config['memory']['memcache']['server'] = '';                        // memcache 服务器地址
  5. $_config['memory']['memcache']['port'] = 11211;                        // memcache 服务器端口
  6. $_config['memory']['memcache']['pconnect'] = 1;                        // memcache 是否长久连接
  7. $_config['memory']['memcache']['timeout'] = 1;                        // memcache 服务器连接超时
复制代码


缓存原理
缓存更新原理如下


以下是缓存的工作原理,在开发过程中当你调用到缓存时,只需要确认你要使用的缓存名称,然后调用loadcache($cachenames, $force)就可以获取到你原先保存的缓存内容


缓存调用
缓存调用方式可以直接传给loadcache($cachenames, $force = false)一个缓存名称后就可以获取到缓存数据。例如:

  1. loadcache('plugin');
复制代码

执行上面的调用后就可以在$_G['cache']['plugin']中获取到相应的缓存数据

缓存更新,在你对相应的缓存数据操作完后只需要调用updatecache($cachename = ), 传给要更新的缓存名称,新的缓存数据就会通过相应的脚本生成新的缓存数据
例如:


  1. updatecache('plugin');
复制代码




上一篇:Discuz X2插件制作之UCenter接口
下一篇:Discuz X2插件制作之性能优化
authicon 馥郁渊汀 发表于 2011-5-8 21:29:57 | 显示全部楼层
哦哦,发财了啊,看到好东西啦
authicon 风中徜徉 发表于 2011-5-8 23:29:42 | 显示全部楼层
这个不错呀
authicon 馥郁渊汀 发表于 2011-5-9 02:29:34 | 显示全部楼层
这个还是不错的!
authicon nmzc 发表于 2011-5-9 08:29:49 | 显示全部楼层
这个不错呀
authicon 计晨 发表于 2011-5-9 10:29:58 | 显示全部楼层
顶顶更健康
authicon 计晨 发表于 2011-5-9 11:59:45 | 显示全部楼层
看一下啊,嘻嘻
authicon mjz 发表于 2011-5-9 17:29:49 | 显示全部楼层
强人,佩服死了。
authicon 馥郁渊汀 发表于 2011-5-9 18:30:00 | 显示全部楼层
支持一下,确实是不错的贴子。
authicon forever21 发表于 2011-5-9 21:29:55 | 显示全部楼层
楼主真强大
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

1314学习网 ( 浙ICP备10214163号 )

GMT+8, 2025-5-2 12:29

Powered by Discuz! X3.4

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表