袁来如此的工作笔记
袁来如此的工作笔记
竹杖芒鞋轻胜马,谁怕? 一蓑烟雨任平生。

给数据量较大的Emlog网站缓存瘦身

浏览量:272

what:

why:

how:
在EMLOG缓存中,最凶残的部分莫非就是“文章分类缓存”和“文章标签缓存”(文章别名缓存也是,但是我一般没用文章别名),这俩缓存简直惨无人道。这两个缓存分别是干什么的呢?文章分类缓存,存的是每一篇文章所对应的分类id和分类名,注意是每一篇文章,那么1w篇文章的话,这里就会存有1w个对应关系。文章标签缓存同理。而它的作用仅仅是在文章内容页告诉你,这篇文章的分类是什么。

而当你的文章数量比较多的时候,你每更新一片文章或者分类就要刷新一次这个存储量异常庞大的缓存文件,导致点了文章发布之后半天还没发布成功,甚至会因为缓存过大而导致文章发布失败。
精简EMLOG的缓存

那么,我建议文章数量多的EMLOG网站可以去除掉“文章分类缓存”和“文章标签缓存”。具体方法为(以文章分类缓存为例),找到根目录下面include下面lib下面的cache.php文件。找到如图的方法,注释掉:

给数据量较大的Emlog网站缓存瘦身

为表示方法的完整性,我象征性的将缓存数据设置为一个空数组,这样,缓存就不会被写入了。
精简缓存带来的后果

精简这两处缓存后,将大大提升管理员发布文章的提交速度,不会因为数据太大而导致后台好像很吃力。

但是,没有了这两个缓存,你的网站模板中,在文章页面调用网站分类和文章标签的默认函数就无效啦,这个得自己写。由于我的网站没有使用标签,目前只注销了文章分类缓存,所以这里只写了文章页面调用文章分类的方法。大家可以参考一下:


// 获取文章分类
    // 分类id从数据库取
    // 分类名仍然从分类缓存取
    // 使用方法,在echo_log页面 $log_sort=getLogSort($logid);
    // echo $log_srot[\sortname\]; //得到分类名
    // echo Url::sort($log_sort[\sortid\]); //得到分类链接
    function getLogSort($logid){
    	$db = MySql::getInstance();
    	$sql = "  `sortid`,`gid` FROM `".DB_PREFIX."blog` WHERE `gid` = {$logid} ";
    	$row = $db -> once_fetch_array($sql);
    	global $CACHE;
    	$sort_cache = $CACHE->readCache(\sort\);
    	return array(
    		\sortid\ => $row[\sortid\],
    		\sortname\ => $sort_cache[$row[\sortid\]][\sortname\]
    	);
    }


没了缓存就得取数据库,这本身就是缓存的作用!另外,如果你在后台开启的链接模式是分类别名模式,则需要修改include下面lib下面的url.php,修改获取文章链接的方法static function log($blogId),首先将此方法修改成static function log($blogId,$sortId);然后将该方法下面的$log_sort = $CACHE->readCache(\logsort\)替换成$log_sort = $CACHE->readCache(\sort\);并且把$log_sort[$blogId]替换成$log_sort[$sortId]; 

打赏