当前位置:首页 » 好文分享 » 详情

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

EMLOG的缓存说明

Emlog程序以其轻巧简单的特点受到不少人的青睐,但是对于一个网站数据量比较大的EMLOG网站来说,EMLOG程序自带的缓存功能就有一点鸡肋了。所以这里分享一下如何给EMLOG网站的缓存进行精简。

在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 = " SELECT `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];

解释:本来生成文章链接的时候,获取分类别名是从文章分类缓存中获取的,现在这个缓存被去掉了,所以获取分类别名就只能从“侧边栏分类缓存”(该缓存其实就是整个网站的分类缓存,该缓存是没有去掉的)中获取。所以我们在生成文章链接的时候就需要增加分类id的参数。

修改完之后,在模板中生成链接的方法就变成了<?php echo Url::log($logid,$sortid);?>(注意:后台文章列表中的预览会没有分类别名,但是不重要)

修改后的url.php中的static function log();
    	/**
    	 * 获取文章链接
    	 */
    	static function log($blogId,$sortId) {
    		$urlMode = Option::get('isurlrewrite');
    		$logUrl = '';
    		$CACHE = Cache::getInstance();
     
    		//开启文章别名
    		if (Option::get('isalias') == 'y') {
    			$logalias_cache = $CACHE->readCache('logalias');
    			if (!empty($logalias_cache[$blogId])) {
    				$logsort_cache = $CACHE->readCache('sort');
    				$sort = '';
    				//分类模式下的url
    				if (3 == $urlMode && isset($logsort_cache[$sortId])) {
    					$sort = !empty($logsort_cache[$sortId]['alias']) ? 
    						$logsort_cache[$sortId]['alias'].'/' : '';
    						//$logsort_cache[$blogId]['name'];
    					//$sort .= '/';
    				}
    				$logUrl = BLOG_URL . $sort . urlencode($logalias_cache[$blogId]);
    				//开启别名html后缀
    				if (Option::get('isalias_html') == 'y') {
    					$logUrl .= '.html';
    				}
    				return $logUrl;
    			}
    		}
     
    		switch ($urlMode) {
    			case '0'://默认:动态
    				$logUrl = BLOG_URL . '?post=' . $blogId;
    				break;
    			case '1'://静态
    				$logUrl = BLOG_URL . 'post-' . $blogId . '.html';
    				break;
    			case '2'://目录
    				$logUrl = BLOG_URL . 'post/' . $blogId;
    				break;
    			case '3'://分类
    				//$log_sort = $CACHE->readCache('logsort');
    				$log_sort = $CACHE -> readCache('sort');
    				if (!empty($log_sort[$sortId]['alias'])) {
    					$logUrl = BLOG_URL . $log_sort[$sortId]['alias'] . '/' . $blogId;
    				//} elseif(!empty($log_sort[$sortId]['name'])) {
    					//$logUrl = BLOG_URL . $log_sort[$sortId]['name'] . '/' . $blogId;
    				} else {
    					$logUrl = BLOG_URL . $blogId;
    				}
    				$logUrl .= '.html';
    				break;
    		}
    		return $logUrl;
    	}

文章作者:一路上,欢迎大家投稿: https://www.blogs.hk/post-87.html
打赏
X
打赏方式:
  • 支付宝
  • 微信
  • QQ红包

打开支付宝扫一扫
日期:2016年07月02日 06:29:04 星期五   分类:好文分享   浏览(77184)   评论(4)
本文地址:https://www.blogs.hk/post-930.html   [百度已收录]
声明:本页信息由网友自行发布或来源于网络,真实性、合法性由发布人负责,请仔细甄别!本站只为传递信息,我们不做任何双方证明,也不承担任何法律责任。文章内容若侵犯你的权益,请联系本站删除!

留言咨询

自动获取QQ

昵称

邮箱

网址

      Copyright © 2024 博客之家 版权所有  
      關於本站免責聲明sitemap新站登錄