uchome源码解读之配置表缓存

版权声明:转载时请以超链接形式标明文章原始出处和作者信息及本声明
http://remindme.blogbus.com/logs/30433431.html

做为sns站点,相比cms站点,动态性要求高,生成静态页面价值不是太大,变更因素太多,因此uchome的缓存一方面是view的缓存,也就是template的缓存,一方面则对每个页面都需要的配置文件做了缓存,减小数据库服务器的负荷.
在home/common.php中,对配置的读取是这样的:
//配置文件
if(!@include_once(S_ROOT.’./data/data_config.php’)) {
include_once(S_ROOT.’./source/function_cache.php’);
config_cache();
}
data/data_config.php文件是通过config_cache()来生成的,看看function_cahce.php文件中的具体实现:
//更新配置文件
function config_cache($updatedata=true) {
global $_SGLOBAL, $_SCONFIG;

$_SCONFIG = array();
$query = $_SGLOBAL['db']->query(’SELECT * FROM ‘.tname(’config’));
while ($value = $_SGLOBAL['db']->fetch_array($query)) {
if($value['var'] == ‘privacy’) {
$value['datavalue'] = empty($value['datavalue'])?array():unserialize($value['datavalue']);
}
$_SCONFIG[$value['var']] = $value['datavalue'];
}
cache_write(’config’, ‘_SCONFIG’, $_SCONFIG);
…..略去部分
}
将配置表中的数据读到$_SCONFIG这个数组中,并利用cache_write写到缓存中,cache_write代码如下:
function cache_write($name, $var, $values) {
$cachefile = S_ROOT.’./data/data_’.$name.’.php’;
$cachetext = “< ?php\r\n”.
“if(!defined(’IN_UCHOME’)) exit(’Access Denied’);\r\n”.
‘$’.$var.’=’.arrayeval($values).
“\r\n?>”;
if(!swritefile($cachefile, $cachetext)) {
exit(”File: $cachefile write error.”);
}
}
看明白了吗?这段代码就是将HASH变量变成可以直接包含的代码存到xxx.php文件里去。
比如你写一个 cache_write(”test”,”hanks”,array(”strong”=>1,”good”=>1,”nice”=>1))
最后你会得到一个data_test.php文件,里面的内容是
if(!defined(’IN_UCHOME’)) exit(’Access Denied’);

$hanks = array(”strong”=>1,”good”=>1,”nice”=>1);

更复杂的嵌套也可以arrayeval会进行字符串的转换。

生成php文件进行缓存是uchome最常用的模式,template也是这样,简单实用

相关日志

Leave a Reply