discuz的数据库缓存机制

function updatecache($cachename = '') {
$cachedir = DISCUZ_ROOT . 'source/function/cache';
$cachedirhandle = dir($cachedir);
//循环执行缓存文件中的函数
while($entry = $cachedirhandle->read()) {
if(!in_array($entry,array('.','..')) && preg_match("/^cache\_([\_\w]+)\.php$/i",$entry,$entryr)) {
include_once libfile('cache/'.$entryr[1],'function');
call_user_func('build_cache_'.$entryr[1]);
}
}
}
// 缓存文件中的函数
function build_cache_click() {
$data = $keys = array();
foreach(C::('home_click')->fetch_all_by_available() as $value) {
//得到$data 这里省略
}
savecache('click',$data); // 更新表pre_common_syscache中的数据
}

// 更新数据 function_core.php
function savecache($cachename,$data) {
C::t('common_syscache')->insert($cachename,$data);
}

//table_common_syscache.php
function insert($cachename,$data) {
//更新表 pre_common_syscache 中的数据 数据库级的缓存
parent::insert(array(
'cname'=> $cachename,
'ctype'=> is_array($data) ? 1:0,
'dateline'=> TIMESTAMP,
'data' => is_array($data) ? serialize($data) : $data
),false,true);

//如果存在内存级的缓存,则更新缓存
if($this->_allowmem && memory('get',$cachename) !== false) {
memory('set',$cachename, $data);
}

//文件缓存
$this->_isfilecache && @unlink(DISCUZ_ROOT.'./data/cache/cache_'.$cachename,'.php');
}

posted @ 2014-03-17 18:21  小刘_php  阅读(223)  评论(0)    收藏  举报