赵荣涛's Archivers

From admin on 2011-09-02 15:52:54

Discuz X memcached机制分析

看看X的memcached是如何加载和运行的。



$discuz->init(); //实例调用
Class_core.php
function init() {

if(!$this->initated) {

$this->_init_db();

$this->_init_memory(); //今天我们关注这个,内存方法。

$this->_init_user();

$this->_init_session();

$this->_init_setting();

$this->_init_cron();

$this->_init_misc();

}

$this->initated = true;

}
 
function _init_memory() {
$this->mem = new discuz_memory(); //新建discuz_memory实例
if($this->init_memory) {
$this->mem->init($this->config['memory']); //注意,init是discuz_memory的方法哦
}
$this->var['memory'] = $this->mem->type;
}
这里看看discuz_memory类是怎么回事
//构造函数
function discuz_memory() {
$this->extension['eaccelerator'] = function_exists('eaccelerator_get');
$this->extension['xcache'] = function_exists('xcache_get');
$this->extension['memcache'] = extension_loaded('memcache'); //检查memcache扩展是否加载,返回bool
}

//_init_memory() 中,实例也调用了init()

function init($config) {

$this->config = $config; //这里的$config能追溯到discuz_core的构造函数,就是把config_global.php的数据加载进来
$this->prefix = empty($config['prefix']) ? substr(md5($_SERVER['HTTP_HOST']), 0, 6).'_' : $config['prefix'];
$this->keys = array();

// memcache 接口,判断是否有mem扩展,并且config中是否设置了服务器地址
if($this->extension['memcache'] && !empty($config['memcache']['server'])) {
require_once libfile('class/memcache');
$this->memory = new discuz_memcache();
$this->memory->init($this->config['memcache']); //这里的init()是discuz_memcache的方法哦,要和之前的区分。
if(!$this->memory->enable) { //检测是否能连接上memcached服务
$this->memory = null;
}
}
 
Discuz_memcache类
class phpig_memcache
{
var $enable;
var $obj;

function phpig_memcache() {

}
//连接memcached服务,返回bool
function init($config) {
if(!empty($config['server'])) {
$this->obj = new Memcache;
if($config['pconnect']) {
$connect = @$this->obj->pconnect($config['server'], $config['port']);
} else {
$connect = @$this->obj->connect($config['server'], $config['port']);
}
$this->enable = $connect ? true : false;
}
}
对此,memcached已经分析完毕了。具体对于怎么使用它的,可以联系X的缓存机制一起阅读
http://www.oicto.com/discuz-x2-memcache-cache/

查看完整版本: Discuz X memcached机制分析

Tags: discuz, memcache, php