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

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

qq不用实名怎么领红包:177

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的参数。

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

修改后的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;
????	}

打赏